07 · Coincidencia de Patrones
Transforma un valor antes del match
Un patrón (parse_date -> .Ok(date)) aplica el transformador de un argumento a la entrada y compara su resultado con el patrón interno. Cada intento de un patrón de view llama al transformador una vez; los enlaces exitosos reutilizan ese resultado. Si no coincide, la ejecución continúa con el brazo siguiente. El transformador debe tener tipos concretos y no puede consumir ni producir recursos lineales. Úsalo directamente en el patrón; los transformadores de view en cuerpos de aliases todavía se rechazan.
En esta página
Un patrón (parse_date -> .Ok(date)) aplica el transformador de un argumento a la entrada y compara su resultado con el patrón interno. Cada intento de un patrón de view llama al transformador una vez; los enlaces exitosos reutilizan ese resultado. Si no coincide, la ejecución continúa con el brazo siguiente. El transformador debe tener tipos concretos y no puede consumir ni producir recursos lineales. Úsalo directamente en el patrón; los transformadores de view en cuerpos de aliases todavía se rechazan.
Ejemplo completo
Transforma un valor antes del match.
// Convert incoming fields at the pattern boundary, then match the typed result.
enum Quantity { Valid(int), Invalid }
fn read_quantity(raw: str) -> Quantity {
return match raw {
"one" => Quantity::Valid(1),
"two" => Quantity::Valid(2),
_ => Quantity::Invalid
}
}
fn describe((read_quantity -> .Valid(quantity)): str) -> str = "{quantity} items"
fn describe(_: str) -> str = "unknown quantity"
var total = 0
for case (read_quantity -> .Valid(quantity)) in ["one", "invalid", "two"] {
total += quantity
}
assert(total == 3)
assert(describe("two") == "2 items")
assert(describe("invalid") == "unknown quantity")
print("Accepted {total} items")
Referencia
zolo run examples/features/40-syntax-fourth/16-view-patterns.zolo --no-cache
Consulta también