Saltar al contenido

07 · Coincidencia de Patrones

Capturas tipadas en strings

Un literal pat compara la cadena completa y convierte las capturas antes de exponer enlaces. Una conversión escalar o construcción validada fallida significa que no coincide. Usa el primer delimitador sin retroceso; se rechazan capturas adyacentes sin delimitador.

En esta página

Un literal pat compara la cadena completa y convierte las capturas antes de exponer enlaces. Una conversión escalar o construcción validada fallida significa que no coincide. Usa el primer delimitador sin retroceso; se rechazan capturas adyacentes sin delimitador.

Ejemplo completo

Capturas tipadas en 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

Reglas y comportamiento

Validación, esquemas y unidades · Documentación

Desde un checkout del repositorio:

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

Índice global

Encuentra tu camino por Zolo

Prueba una idea

Empieza aquí

9 resultados

9 resultados

enespt-br