一、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")
运行结果