函数的用途:
1.完成指定的任务,这种情况下作为调用语句使用。
2.计算并返回值,这种情况下,函数作为赋值语句的表达式使用。
函数的参数为空,必须使用()表示函数调用。例外:当函数只有一个参数,并且这个参数是字符串或表构造时,()是可选的。
lua提供了面向对象调用函数的语法
o:foo(x)与o.f(o,x)是等价的。
lua函数的实参与形参的匹配与赋值语句类似,多余部分被忽略,缺少部分nil补足。
lua函数可以返回多个值,return后列出要返回值的列表即可返回多值
s, e = string.find("hello lua", "lua")
那么,lua是如何调整函数返回值的个数来适应调用环境的呢?
1. use as statement,所以返回值被忽略。
2. use as expression
- 当作为表达式最后一个参数或仅有的一个参数时,根据变量个数,函数尽可能多地返回多个值,不足补nil,超出舍去。
- 其他情况函数调用返回第一个值(如果无返回值为nil)
- 函数调用作为函数参数被调用时,和多值赋值相同
- 函数调用在表构造中初始化时,和多值赋值相同
- return f(); f()返回所有值。可以使用括号强制返回一个值return (f())
c语言中,可以使用函数指针来调用可变的函数,可以声明参数可变的函数,但不能两者同时可变。
Lua可以这样来调用可变参数的可变函数:f(unpack(a))
unpack接受一个数组作为输入参数,返回数组所有的元素。注意是数字,返回ipair遍历结果
f = string.find
a = {"hello lua", "lua"}
print(f(unpack(a)))
可变参数使用...表示,Lua将可变参数放在arg的表中,含有一个域n表示参数的个数
function select(n, ...)
return arg[n]
end
给函数参数命名:可以把表作为函数的唯一参数来实现命名参数的功能。
rename {old="temp.lua", new="temp1.lua"}
function rename(arg)
os.rename(arg.old, arg.new)
end
当参数比较多,或容易混淆时,可以采用命名参数。
完