0Pricing
Lua Academy · Lección

¿Qué son los upvalues?

Comprenda cómo las closures capturan variables como upvalues de los ámbitos envolventes.

¿Qué son los upvalues? es una lección gratuita de Lua Academy en CoddyKit. Esta es la lección 1 de 4. Puedes leer la lección completa abajo gratuitamente — luego la practicas en el navegador con un editor de código integrado y un tutor de IA 24/7. Forma parte de la ruta de aprendizaje de Lua Academy, y tu progreso se sincroniza en la web y la app de CoddyKit. El curso de Lua Academy incluye 4 lecciones en total.

Repaso de los cierres

Un cierre es una función que incluye referencias a variables de su ámbito envolvente. Estas variables capturadas se denominan upvalues.

Ejemplo de upvalue

La función interna captura count del ámbito de la función externa.

local function makeCounter()
  local count = 0
  return function()
    count = count + 1
    return count
  end
end
local next = makeCounter()
print(next())  -- 1
print(next())  -- 2

Los upvalues son variables activas

Los upvalues no son copias, sino referencias a la variable. El closure puede leerlos y modificarlos.

Varios upvalues

Un closure puede capturar varias variables de varios ámbitos envolventes.

local function adder(x)
  return function(y) return x + y end
end
local add5 = adder(5)
print(add5(3))  -- 8

Duración de los upvalues

Los upvalues existen mientras esté activo algún closure que haga referencia a ellos. Solo se eliminan mediante el recolector de basura cuando se han recolectado todos los closures que los referencian.

debug.getupvalue

Puede inspeccionar los upvalues con debug.getupvalue(fn, n), que devuelve el nombre y el valor del upvalue número n.

local x = 10
local function f() return x end
print(debug.getupvalue(f, 1))  -- x  10

Upvalue frente a global

Los upvalues (variables locales capturadas por closures) son más rápidos que las variables globales. La VM accede a ellos directamente mediante un índice, sin tener que buscar en una tabla.

Upvalue cerrado

Cuando termina el bloque envolvente, el upvalue se cierra: pasa de la pila al heap. El closure sigue compartiendo esta celda del heap.

Upvalues abiertos y cerrados

Abierto: el upvalue aún está en la pila (la función envolvente sigue ejecutándose). Cerrado: el upvalue pasó al heap cuando terminó el ámbito envolvente.

Caso de uso práctico

Los upvalues implementan de forma natural un estado privado en los closures: una función de módulo puede conservar un estado privado sin exponerlo globalmente.

local id = 0
local function newId()
  id = id + 1
  return id
end

Límite de upvalues

Cada función de Lua puede referenciar hasta 255 upvalues. En la práctica, esto rara vez supone un problema.

Pregunta sobre upvalues

¿Qué es un upvalue?

Resumen: upvalues

Los upvalues son las variables externas capturadas por un closure. Persisten en el heap después de que termina el ámbito envolvente, se comparten por referencia y proporcionan un estado mutable privado sin usar variables globales.

Preguntas frecuentes

¿La lección «¿Qué son los upvalues?» es gratis?

Sí — el texto completo de «¿Qué son los upvalues?» es gratis para leer aquí en la web. Para practicarla de forma interactiva (editor de código integrado y tutor de IA 24/7) y desbloquear el resto del curso de Lua Academy, actualiza a CoddyKit PRO. El curso de Lua Academy incluye 4 lecciones en total.

¿Qué aprenderé en «¿Qué son los upvalues?»?

Comprenda cómo las closures capturan variables como upvalues de los ámbitos envolventes. Practicas Lua Academy con código real que ejecutas directamente en el navegador, y un tutor de IA 24/7 responde tus preguntas mientras trabajas en la lección.

¿Necesito experiencia previa para empezar Lua Academy?

No se requiere experiencia previa. Lua Academy en CoddyKit está estructurado para principiantes hasta estudiantes avanzados, así que puedes empezar aquí o desde el inicio y avanzar a tu ritmo. Esta es la lección 1 de 4.

¿Cuánto tiempo toma la lección «¿Qué son los upvalues?»?

La mayoría de las lecciones de CoddyKit toman alrededor de 5–10 minutos. Cada una es compacta e interactiva, así que avanzas constantemente y retomas exactamente por donde dejaste en la web y la app.

¿Puedo escribir y ejecutar código en esta lección de Lua Academy?

Sí. Cada lección de Lua Academy incluye un editor de código integrado, así que escribes y ejecutas código real directamente en tu navegador y obtienes retroalimentación instantánea de IA — sin configuración local necesaria.

Todas las lecciones de este curso

  1. ¿Qué son los upvalues?
  2. Upvalues compartidos entre closures
  3. Funciones fábrica y generadores
  4. Memoización con closures
← Volver a Lua Academy