El tutorial muestra algunos ejemplos muy básicos de coincidencia de patrones, tales como búsqueda de más de un número entero de emular una sentencia switch c-estilo. El tutorial también muestra cómo hacer una desestructuración básica sobre un tipo de tupla y desestructurar estructuras.patrón Rust búsqueda de más de un vector
parece que debería ser posible patrón de coincidencia sobre un vector, pero no puedo averiguar la sintaxis correcta para él y no he encontrado ningún ejemplo de ello.
Por ejemplo, en Haskell se puede desestructurar fácilmente una lista:
foldr :: (a -> b -> b) -> b -> [a] -> b
foldr func initValue [] = initValue
foldr func initValue (x:xs) = func initValue $ foldr initValue func xs
Así, mirando a una traducción aproximada, sería bueno poder hacer:
fn foldr<A, B>(func: fn(A, B) -> B,
initValue: B,
vals: [A]) -> B {
alt vals {
[] { ret initValue; }
_ {
let h = vec::head(vals),
t = vec::tail(vals);
ret foldr(func, func(initValue, h), t);
}
}
}
Nota : Sé que podría usar una instrucción if aquí, solo estoy usando esto como un ejemplo de coincidencia de patrones sobre un vector.
este momento, vuelve:
patterns.rs:10:4: 10:5 error: constant contains unimplemented expression type
patterns.rs:10 [] { ret initValue; }
^
error: aborting due to previous errors
Hay un ejemplo en el tutorial para desestructurar estructuras (definida con { .. }
) y tuplas (definidos con (..)
), por lo que parece que debe haber soporte integrado para vectores también considerando que también contienen una sintaxis especial (definida con [ .. ]
).
dude en corregirme si estoy usando vectores de la forma equivocada también.
Algo tangencial, pero por la cola llama se debe utilizar "ser" en lugar de "ret". –
@ian-b Interesante, el [tutorial] (http://doc.rust-lang.org/doc/tutorial.html) y [referencia de idioma] (http://doc.rust-lang.org/doc/ rust.html) parecen desactualizados, mencionan 'be' como palabra clave pero no hacen referencia a él en el momento – ash