在 Lua 中遇到需要使用可变参数时,通常这样处理:
local function add(...)
local l = 0
for k, v in ipairs({...}) do
l = l + v
end
return l
end
print(add(1, 2, 3, 4))
-- 输出:
-- 10
但是,如果传入的参数中间有 nil 那么,结果就不是预期的了:
local function add(...)
local l = 0
for k, v in ipairs({...}) do
l = l + v
end
return l
end
print(add(1, 2, nil, 4))
-- 输出:
-- 3
因此,在遍历参数时,推荐使用 select 函数:
local function add(...)
local l = 0
for i = 1, select('#', ...), 1 do
l = l + (select(i, ...) or 0)
end
return l
end
print(add(1, 2, nil, 4))
-- 输出:
-- 7