Lua学习笔记-函数
1.函数声明语法:
function func_name (arguments-list) statements-list; end;
首先说明一点,lua中函数是第一类值,和其他的类型(table,number,boolean等)一样,所以可以作为函数的参数,table的键和值。
2.函数调用
直接使用函数名称调用,参数按照形参表里面依次匹配,如果实参多于形参,则多余实参被丢弃;如果实参少于形参,那么剩下的形参会被赋值为nil。
function f(a, b) return a, b end CALL PARAMETERS f(3) a=3, b=nil f(3, 4) a=3, b=4 f(3, 4, 5) a=3, b=4 (5 is discarded)
另外函数调用时如果参数为字符串或者表构造时,可以不写括号,用法如下。吐槽一下,这点设计看似方便,实则是阅读代码的灾难。实际上多打一对括号并不会花很多力气,但是代码的阅读性看起来就好很多了。
function func(string) print(string) end func "123" func {1,2,3} 输出结果 123 table: 008DB3B0
3. 多返回值
这点较为简单,需要注意的是如果调用的时候在函数加一个括号,只会返回第一个值。
function f(a, b) return a,b end print(f(1,2)) print((f(1,2))) 输出结果 1 2 1
4. 可变参数
Lua 函数可以接受可变数目的参数,和 C 语言类似在函数参数列表中使用三点(...)表示函数有可变的参数。Lua 将函数的参数放在一个叫 arg 的表中,除了参数以外,arg表中还有一个域 n 表示参数的个数。
function g (a, b, ...) end CALL PARAMETERS g(3) a=3, b=nil, arg={n=0} g(3, 4) a=3, b=4, arg={n=0} g(3,4,5,6) a=3, b=4, arg={5,6;n=2}
5. 命名参数
命名参数使用表传递参数,这个有点鸡肋,因为如果没有函数的说明,根本不知道参数是什么,而且函数对于参数的依赖度过高,必须进行参数判断。
6. 闭包
这个具体应用还不太清楚,之后补充。