一、select处理
-- 返回可变参数的部分参数,从第n个位置开始,如果n超过了实际元素的个数,则没有任何打印
select(n, ...)
-- 返回可变参数元素的个数
select("#", ...)
代码示例1
function test(...)
print("当前table中的元素个数为:", select("#", ...))
print(select(1, ...))
print(select(2, ...))
print(select(3, ...))
print(select(4, ...))
print(select(5, ...))
print(select(10, ...))
end
test(1, 2, 3, true, "lwang")
运行结果
代码示例2:求若干数据的和
function add(...)
local sum = 0
local count = select("#", ...)
print("当前table中的元素个数为:", count)
for i=1, count do
sum = sum + select(i, ...)
end
print("sum = ", sum)
end
add(1, 2, 3, 4, 5)
运行结果
二、pack处理
table.pack(…).n 原理是将可变参数打包成一个table,且会在最后多出一个n键,其对应的值就是table元素的个数
-- pack 处理可变参数
--
function add (...)
local count = table.pack(...).n
print("当前参数的个数为: ", count)
-- 将table保存在tmp中
tmp = table.pack(...);
sum = 0
-- 版本1:遍历table,求和
for k, v in pairs(tmp) do
if k ~= "n" then
sum = sum + v
end
-- print(k, v)
end
-- 版本2:遍历table,求和
-- for i=1, count do
-- if tmp[i] ~= nil then
-- sum = sum + tmp[i]
-- end
-- end
return sum
end
print("sum = ", add(1, 2, 3, 4, 5, nil, 10, nil, nil))
运行结果
2.2 unpack
作用:将table解成可变参数
语法:
-- i 是起始位置 j 是结束位置
table.unpack(list, i, j)
规则:
- 如果 i 和 j 都不传,默认解出全部参数
- 如果只传一个参数i,表示解出从i位置开始的全部参数
代码示例
function func()
return table.pack(1, 2, 3, 4, 5)
end
print(func)
print(table.unpack(func()))
print(table.unpack(func(), 4))
print(table.unpack(func(), 2, 4))
print("===============")
tmp = func()
a, b, c, d, e = table.unpack(tmp)
print(a, b, c, d, e)
运行结果
三、补充
获取参数个数的第三种方法,本质还是可变参转成table
function func2(...)
tmp = {...}
local count = #tmp;
print("参数个数为:", count)
for k, v in pairs(tmp) do
print(k, v)
end
end
func2(1, 3, 4, 7, 8, nil, "lwang")
运行结果