Saltar al contenido

06 · Funciones

Bloques finales nombrados

Varios callbacks pueden aparecer después de la llamada como bloques etiquetados. Las etiquetas resuelven parámetros de función y permiten otro orden. Crear el callback no ejecuta su cuerpo; las capturas mutables conservan sus celdas.

En esta página

Varios callbacks pueden aparecer después de la llamada como bloques etiquetados. Las etiquetas resuelven parámetros de función y permiten otro orden. Crear el callback no ejecuta su cuerpo; las capturas mutables conservan sus celdas.

Ejemplo completo

Bloques finales nombrados.

22-named-callback-blocks.zolo
Playground
// 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

Reglas y comportamiento

Parámetros de funciones y lambdas · Documentación

Desde un checkout del repositorio:

zolo examples/features/05-functions/22-named-callback-blocks.zolo

Consulta también

Índice global

Encuentra tu camino por Zolo

Prueba una idea

Empieza aquí

9 resultados

9 resultados

enespt-br