typestar

Clausuras en Lua

Una función captura los locales de alrededor, vivos entre llamadas.

-- A closure captures the locals around it, alive between calls.
local function make_counter(label)
  local seen = 0
  return function()
    seen = seen + 1
    return label .. " #" .. seen
  end
end

local kills = make_counter("skeleton")
local finds = make_counter("relic")

print(kills())
print(kills())
print(finds())
print(kills())

Cómo funciona

  1. make_counter devuelve una función que aún sostiene seen.
  2. Cada contador devuelto es dueño de su propio upvalue.
  3. Las llamadas se intercalan sin interferencia entre los dos.

Palabras clave y builtins usados aquí

El intento, en números

Líneas
16
Caracteres a escribir
322
Tokens
64
Ritmo de tres estrellas
70 tpm

Al ritmo de tres estrellas de 70 tokens por minuto, este intento toma unos 55 segundos.

Escribe este fragmento

Paso 1 de 3 en Clausuras; paso 14 de 27 en Fundamentos del lenguaje.

← Anterior Siguiente →