lua函数

1. 函数定义

lua 使用function定义函数,语法如下:

function  fun_name(args)  --args表示参数列表,函数的参数列表可以为空
    --body
end

上面方法定义了一个全局函数,为了不污染命名空间,同时减少性能损耗,应该尽量使用局部函数,方法如下(只要在function前面加local 声明即可)

local function  fun_name(args)  --args表示参数列表,函数的参数列表可以为空
    --body
end

2. 函数参数

函数传参几个规则
1. 若参数个数大于形参个数,从左向右,多余的实参被忽略
2. 若参数个数小于形参个数,从左向右,没有被初始化的形参被初始化为nil
3. lua支持变长参数。用...表示,在参数列表后面。一个可变长参数不会有一个对应参数列表。他会收集所有的参数放进一个变参表达式里(...)。这个表达式的值表示所有参数值。它与函数多返回值的那种情况是相似的。如果一个变参表达式在是其他表达式内部或在一些表达式的中间,他只返回是一个元素,例如: local cc,dd,ee = a,...,34。 如果这个表达式是在表达式列表的最后一个,他不会对参数进行调和除非用一个括号。

例如有如下三个函数

function f(a,b) end
function g(a,b,...) end
function r() return 1,2,3 end

传入的参数与参数映射如下

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为可变参数的第一个元素。第三个参数是个可变参,它取可变参的剩余参数

3. 函数范例

如下定义一个max函数,参数为n1,n2,用于比较两数值的大小

function max(num1,num2)
    if (num1>num2) then
        result = num1
    else
        result = num2
    end

    return result    
end

print("两值比较最大值为",max(10,10))

致谢!

LUA可变长参数 ... 三个点

原文地址:https://www.cnblogs.com/guoew/p/10251151.html