Lua 函数 - 可变参数
参考至菜鸟教程。
Lua函数可以接收可变数目的参数,和C语言类似,在函数参数列表中使用三点...
表示函数有可变的参数。
function add(...)
local s = 0
for i, v in ipairs{...} do --> {...} 表示一个由所有变长参数构成的数组
s = s + v
end
return s
end
print(add(3,4,5,6,7)) --->25
同时我们可以将可变参数赋值给一个变量。
例如,我们计算几个数的平均值:
function average(...)
result = 0
local arg = {...} --> arg 为一个表,局部变量
for i,v in ipairs(arg) do
result = result + v
end
print("总共传入 " .. #arg .. " 个数") --> #数组变量名 可以获取数组长度,但是如果这个数组中包含nil,那么需要通过select获取
return result/#arg
end
print("平均值为",average(10,5,3,4,5,6))
输出结果:
我们也可以通过select("#",...)
来获取可变参数的数量:
function average(...)
result = 0
local arg = {...} --> arg 为一个表,局部变量
for i,v in ipairs(arg) do
result = result + v
end
print("总共传入 " .. select("#",...) .. " 个数")
return result/select("#",...)
end
print("平均值为",average(10,5,3,4,5,6))
输出结果与上述一样。
有些我们可能需要几个固定参数加上可变参数,固定参数必须放在变长参数之前:
function FWrite(fmt,...)
print(string.format(fmt,...))
end
FWrite("test")
FWrite("%d %d",1,2)
输出结果:
通常在遍历变长参数的时候只需要使用 {…},然而变长参数可能会包含一些 nil,那么就可以用 select 函数来访问变长参数了:select(‘#’, …) 或者 select(n, …)
select('#',...)
返回可变参数的长度。select(n, …)
用于返回从起点 n 开始到结束位置的所有参数列表。
调用select时,必须传入一个固定的实参selector(选择开关)和一系列参数。如果selector为数字n,那么select返回参数列表中从索引n开始到结束的所有参数列表,否则只能为字符串#
,这样select返回变长参数的总数。
function f(...)
a = select(3,...) -->从第三个位置开始,变量 a 对应右边变量列表的第一个参数
print (a)
print (select(3,...)) -->打印所有列表参数
end
f(0,1,2,3,4,5)
输出结果为:
实例:
function foo(...)
for i = 1, select('#', ...) do -->获取参数总数
local arg = select(i, ...); -->读取参数,arg 对应的是右边变量列表的第一个参数
print("arg", arg);
end
end
foo(1, 2, 3, 4);
输出结果: