Function definitions
The syntax for function definition is
function ::= function funcbody
funcbody ::= `(´ [parlist] `)´ block end
statement ::= function funcname funcbody
statement ::= local function Name funcbody
funcname ::= Name {`.´ Name} [`:´ Name]
function f () body end
translates
tof = function () body end
function t.a.b.c.f () body end
translates
tot.a.b.c.f = function () body end
local function f () body end
translates
tolocal f; f = function () body end
local f = function () body end
(This only makes a difference
when the body of the function contains references to f
.)A function definition is an executable expression, whose value has type function. When Lua pre-compiles a chunk, all its function bodies are pre-compiled too. Then, whenever Lua executes the function definition, the function is instantiated (or closed). This function instance (or closure) is the final value of the expression. Different instances of the same function can refer to different external local variables and can have different environment tables.
Parameters act as local variables that are initialized with the argument values:
parlist ::= namelist [`,´ `...´] | `...´
When a function is called, the list of arguments is adjusted to the length of the list of
parameters, unless the function is a variadic or vararg function, which is indicated by three
dots ('...
') at the end of its parameter list. A vararg function does not adjust
its argument list; instead, it collects all extra arguments and supplies them to the function
through a vararg expression, which is also written as three dots. The value of this
expression is a list of all actual extra arguments, similar to a function with multiple results. If
a vararg expression is used inside another expression or in the middle of a list of expressions,
then its return list is adjusted to one element. If the expression is used as the last element of a
list of expressions, then no adjustment is made (unless that last expression is enclosed in
parentheses).
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
Results are returned using the return statement (see Control Structures). If control reaches the end of a function without encountering a return statement, then the function returns with no results.