Pular para o conteúdo

07 · Casamento de Padrões

Transforme o valor antes do match

Um padrão (parse_date -> .Ok(date)) aplica o transformador de um argumento à entrada e compara o resultado com o padrão interno. Cada tentativa de um padrão de view chama o transformador uma vez; os bindings bem-sucedidos reutilizam esse resultado. Se não combinar, a execução segue para o próximo braço. O transformador precisa ter tipos concretos e não pode consumir nem produzir recursos lineares. Use-o diretamente no padrão; transformadores de view no corpo de aliases ainda são rejeitados.

Nesta página

Um padrão (parse_date -> .Ok(date)) aplica o transformador de um argumento à entrada e compara o resultado com o padrão interno. Cada tentativa de um padrão de view chama o transformador uma vez; os bindings bem-sucedidos reutilizam esse resultado. Se não combinar, a execução segue para o próximo braço. O transformador precisa ter tipos concretos e não pode consumir nem produzir recursos lineares. Use-o diretamente no padrão; transformadores de view no corpo de aliases ainda são rejeitados.

Exemplo completo

Transforme o valor antes do match.

16-view-patterns.zolo
Playground
// 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")

Referência

Referência · Programa fonte

zolo run examples/features/40-syntax-fourth/16-view-patterns.zolo --no-cache

Veja também

Índice global

Encontre seu caminho pela Zolo

Experimente uma ideia

Comece por aqui

9 resultados

9 resultados

enespt-br