变长参数
符号“...”表示函数接受不同数量的参数,{...}将不同数量参数转化为数组进行遍历
function add(...)
local a=0
for k,v in ipairs{...} do
a=a+v
end
return a
end
 
print(add(1,2,3,4))
 
function fun0(...)
print("params=",...)
end
 
lua支持多个返回值,
function fun1(...)
return ...
end 表示返回输入的可变长参数
当函数支持多个返回之时,只有作为一个表达式中最后一个值或是仅有的一个值时才能完全返回所有返回值,否则只返回第一个返回值,或是用()圆括号限制,只返回一个值
fun0(fun1(1,2),3) 打印1,3
fun0(3,fun1(1,2))打印3,1,2
fun0(3,(fun1(1,2)))打印3,1
fun0((fun1(1,2)),3)打印1,3
 
可变长参数中有可能有nil值需要使用select来访问可变长参数
#表示获取的可变长参数个数,包括nil
select(n,...)表示访问...可变长参数n位及以后的值
function fun2(...)
for i=1,select("#",...) do
local args=select(i,...)
print(args)因为使用一个局部变量args存储,所以args是可变长参数的第i个值
 
print(select(i,...))输出的是可变长参数第i位及以后的值
end
end
 
fun2(8,9,0)
具名参数
可以将一个table作为实参传入函数,并且此table如果是唯一实参可省略()圆括号,此种方法在一个函数有大量实参的情况下使用
function fun3(person)
print("name=",person.name)
print("age=",person.age)
end
 
fun3{name="wang",age=30}