Definiciones de función
La sintaxis para la definición de funciones es
function ::= function funcbody
funcbody ::= `(´ [parlist] `)´ block end
statement ::= function funcname funcbody
statement ::= local function Name funcbody
funcname ::= Name {`.´ Name} [`:´ Name]
function f () body end
se traduce porf = function () body end
function t.a.b.c.f () body end
se traduce port.a.b.c.f = function () body end
local function f () body end
se traduce porlocal f; f = function () body end
local f = function () body end
(Esto sólo supone una diferencia cuando el cuerpo de la función contiene referencias a " f
)Una definición de función es una expresión ejecutable, cuyo valor tiene el tipo función. Cuando Lua precompila un chunk, todos los cuerpos de sus funciones también son precompilados. Entonces, cada vez que Lua ejecuta la definición de función, la función es instanciada (o cerrada). Esta instancia de función (o cierre) es el valor final de la expresión. Diferentes instancias de la misma función pueden referirse a diferentes variables locales externas y pueden tener diferentes tablas de entorno.
Los parámetros actúan como variables locales que se inicializan con los valores de los argumentos:
parlist ::= namelist [`,´ `...´] | `...´
Cuando se llama a una función, la lista de argumentos se ajusta a la longitud de la lista de parámetros, a menos que la función sea variádica o vararg, lo que se indica con tres puntos ('...
') al final de su lista de parámetros. Una función vararg no ajusta su lista de argumentos, sino que recoge todos los argumentos adicionales y los suministra a la función a través de una expresión vararg, que también se escribe con tres puntos. El valor de esta expresión es una lista de todos los argumentos extra reales, similar a una función con múltiples resultados. Si una expresión vararg se utiliza dentro de otra expresión o en medio de una lista de expresiones, su lista de retorno se ajusta a un elemento. Si la expresión se utiliza como último elemento de una lista de expresiones, no se realiza ningún ajuste (a menos que esa última expresión esté encerrada entre paréntesis).
function f(a, b) end
function g(a, b, ...) end
function r() return 1,2,3 end
CALL PARAMETERS
f(3) a=3, b=null
f(3, 4) a=3, b=4
f(3, 4, 5) a=3, b=4
f(r(), 10) a=1, b=10
f(r()) a=1, b=2
g(3) a=3, b=null, ... --> (nothing)
g(3, 4) a=3, b=4, ... --> (nothing)
g(3, 4, 5, 8) a=3, b=4, ... --> 5 8
g(5, r()) a=5, b=1, ... --> 2 3
Los resultados se devuelven mediante la sentencia return (véase Estructuras de control). Si el control llega al final de una función sin encontrar una sentencia return, entonces la función vuelve sin resultados.