Llamadas de funciones
functioncall ::= prefixexp args
En una llamada a función, primero se evalúan prefixexp y args. Si el valor de prefixexp tiene el tipo function, entonces se llama a esta función con los argumentos dados. En caso contrario, se llama al metamétodo "call" de prefixexp, teniendo como primer parámetro el valor de prefixexp, seguido de los argumentos originales de la llamada.
functioncall ::= prefixexp `:´ Name argspueden utilizarse para llamar a "métodos". Una llamada ' v:name(args) es azúcar sintáctico para ' v.name(v,args), excepto que ' v se evalúa sólo una vez.Los argumentos tienen la siguiente sintaxis:
args ::= `(´ [explist] `)´
args ::= tableconstructor
args ::= String
Todas las expresiones de los argumentos se evalúan antes de la llamada. Una llamada de la forma ' f{fields} es azúcar sintáctico para ' f({fields}); es decir, la lista de argumentos es una única tabla nueva. Una llamada de la forma ' f'string' (o ' f"string" of[[string]]) es azúcar sintáctico para ' f('string'); es decir, la lista de argumentos es una única cadena literal.
(' en una llamada a función. Esta restricción evita algunas ambigüedades del lenguaje. Si escribea = f
(g).x(a)
Lua lo vería como una única sentencia, ' a = f(g).x(a). Por lo tanto, si desea dos declaraciones, debe añadir un punto y coma entre ellas. Si realmente quieres llamar a ' f, debes eliminar el salto de línea antes de ' (g).
returnfunctioncall se denomina llamada de cola. Lua implementa ' llamadas de cola adecuadas (o ' correcto 'recursividad de cola): en una llamada de cola, la función llamada reutiliza la entrada de pila del ' function.Therefore llamante , no hay límite en el número de llamadas de cola anidadas que un programa puede ejecutar. Sin embargo, una llamada de cola borra cualquier información de depuración sobre la función de llamada. Tenga en cuenta que una llamada de cola sólo se produce con una sintaxis particular, en la que el retorno tiene una única llamada a función como argumento; esta sintaxis hace que la función que llama devuelva exactamente los retornos de la función llamada. Por lo tanto, ninguno de los siguientes ejemplos son llamadas de cola:return (f(x)) -- results adjusted to 1
return 2 * f(x) -- additional results
return x, f(x)
f(x); return -- results discarded
return x or f(x) -- results adjusted to 1