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
// 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
Consulta también