lua 使用function定义函数,语法以下:html
function fun_name(args) --args表示参数列表,函数的参数列表能够为空 --body end
上面方法定义了一个全局函数,为了避免污染命名空间,同时减小性能损耗,应该尽可能使用局部函数,方法以下(只要在function前面加local 声明便可)函数
local function fun_name(args) --args表示参数列表,函数的参数列表能够为空 --body end
函数传参几个规则
1. 若参数个数大于形参个数,从左向右,多余的实参被忽略
2. 若参数个数小于形参个数,从左向右,没有被初始化的形参被初始化为nil
3. lua支持变长参数。用...表示,在参数列表后面。一个可变长参数不会有一个对应参数列表。他会收集全部的参数放进一个变参表达式里(...)。这个表达式的值表示全部参数值。它与函数多返回值的那种状况是类似的。若是一个变参表达式在是其余表达式内部或在一些表达式的中间,他只返回是一个元素,例如: local cc,dd,ee = a,...,34。 若是这个表达式是在表达式列表的最后一个,他不会对参数进行调和除非用一个括号。性能
例若有以下三个函数lua
function f(a,b) end function g(a,b,...) end function r() return 1,2,3 end
传入的参数与参数映射以下code
CALL PARAMETERS f(3) a=4,b=nil --没有为b传值则b为nil f(4,5) a=4,b=5 --参数一一对应 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=nil, ... -->(nothing) --b参数和...参数都没有传参数则为nil g(3,4) a=3,b=4, ... -->(nothing) --没有为可变参数传参则为nil g(3,4,5,6) a=3,b=4, ... -->5 6 --可变参数为最后一个,则自动收集参数列表到可变参数 g(5,r()) a=5,b=1, ... -->2,3 --第二个参数b传的是一个可变参,则b为可变参数的第一个元素。第三个参数是个可变参,它取可变参的剩余参数
以下定义一个max函数,参数为n1,n2,用于比较两数值的大小htm
function max(num1,num2) if (num1>num2) then result = num1 else result = num2 end return result end print("两值比较最大值为",max(10,10))
LUA可变长参数 ... 三个点blog