Pular para o conteúdo

07 · Casamento de Padrões

Capturas tipadas em strings

Um literal pat compara a string inteira e converte as capturas antes de expor os bindings. Conversão escalar ou construção validada que falha significa não corresponder. O primeiro delimitador é usado sem backtracking; capturas adjacentes sem delimitador são rejeitadas.

Nesta página

Um literal pat compara a string inteira e converte as capturas antes de expor os bindings. Conversão escalar ou construção validada que falha significa não corresponder. O primeiro delimitador é usado sem backtracking; capturas adjacentes sem delimitador são rejeitadas.

Exemplo completo

Capturas tipadas em strings.

17-string-captures.zolo
Playground
// Complete-string matching; conversions and guards can fall through.

fn order(input: str) -> str {
    match input {
        pat"order/{id: int}/{status: str}" if id > 0 => "{id}:{status}",
        _ => "invalid",
    }
}
print(order("order/42/paid")) // expected: 42:paid

print(order("order/oops/paid")) // expected: invalid

print(order("prefixorder/7/paid")) // expected: invalid

print(order("order/-1/paid")) // expected: invalid


let enabled = match "flag/true" {
    pat"flag/{value: bool}" => value,
    _ => false,
}
print(enabled) // expected: true


let braces = match r"{done}/7" {
    pat"{{done}}/{value: int}" => value,
    _ => -1,
}
print(braces) // expected: 7


newtype Positive(int) where |value| value > 0
let checked = match "id/23" {
    pat"id/{value: Positive}" => value.unwrap(),
    _ => -1,
}
print(checked) // expected: 23

let rejected = match "id/-2" {
    pat"id/{value: Positive}" => value.unwrap(),
    _ => -1,
}
print(rejected) // expected: -1

Regras e comportamento

Validação, schemas e unidades · Documentação

A partir de um checkout do repositório:

zolo examples/features/10-pattern-matching/17-string-captures.zolo

Índice global

Encontre seu caminho pela Zolo

Experimente uma ideia

Comece por aqui

9 resultados

9 resultados

enespt-br