06 · Funções
Blocos finais nomeados
Vários callbacks podem aparecer depois da chamada como blocos com rótulos. Os rótulos resolvem os parâmetros de função, permitindo outra ordem. Criar o callback não executa seu corpo; capturas mutáveis preservam suas células.
Nesta página
Vários callbacks podem aparecer depois da chamada como blocos com rótulos. Os rótulos resolvem os parâmetros de função, permitindo outra ordem. Criar o callback não executa seu corpo; capturas mutáveis preservam suas células.
Exemplo completo
Blocos finais nomeados.
22-named-callback-blocks.zolo
// Several callbacks read in the order of the operation they describe.
fn dialog(title: str, content: fn() -> str, confirm: fn() -> bool) -> str {
let message = content()
if confirm() { "{title}: {message}" } else { "{title}: cancelled" }
}
let answer = dialog(title: "Delete?") content {
"This removes one file."
} confirm {
true
}
print(answer)
// expected: Delete?: This removes one file.
fn transform(value: int, before: fn(int) -> int, finish: fn(int) -> int) -> int {
finish(before(value))
}
print(transform(3) finish { |value| value * 2 } before { |value| value + 1 })
// expected: 8
// Creating a callback does not run its body. Mutable captures keep their cell.
var calls = 0
fn invoke(work: fn() -> int) -> int = work()
print(invoke() work { calls += 1; calls })
// expected: 1
print(calls)
// expected: 1
Regras e comportamento
Parâmetros de funções e lambdas · Documentação
A partir de um checkout do repositório:
zolo examples/features/05-functions/22-named-callback-blocks.zolo
Veja também