26 · Efeitos Algébricos
Handlers antes do bloco
with handler_value { corpo } avalia e instala o handler antes do corpo. A semântica é a mesma de handle corpo with handler_value. Blocos aninhados restauram o handler externo, e retornos e limpeza mantêm suas fronteiras léxicas. O valor precisa ser um Handler comprovado.
Nesta página
with handler_value { corpo } avalia e instala o handler antes do corpo. A semântica é a mesma de handle corpo with handler_value. Blocos aninhados restauram o handler externo, e retornos e limpeza mantêm suas fronteiras léxicas. O valor precisa ser um Handler comprovado.
Exemplo completo
Handlers antes do bloco.
21-lexical-handlers.zolo
// Prefix handler installation keeps the interpretation next to its scope.
// expected:
// memory
// inner
// memory
effect Config {
fn read() -> str
}
fn load() with Config -> str = perform Config::read()
let memory = handler {
Config::read() => "memory",
}
let inner = handler {
Config::read() => "inner",
}
print(with memory { load() })
let nested = with memory {
let answer = with inner { load() }
answer
}
print(nested)
print(with memory { load() })
Regras e comportamento
Handlers e escopos de recursos · Documentação
A partir de um checkout do repositório:
zolo examples/features/25-effects/21-lexical-handlers.zolo
Veja também