在具有可变数量参数的Lua函数中处理参数
问题描述:
我试图编写一个具有可变数量参数的函数,该参数为其所有数字条目执行某些操作。所以我想出了这样的事情:在具有可变数量参数的Lua函数中处理参数
function luaFunc (...)
for i,v in ipairs{...} do
if type(v)=='number' then
--do something
end
end
end
但是当我运行这个,它停止正确的第一个非数字参数。有什么问题?
答
local function luaFunc (...)
for i = 1, select('#',...) do
local v = select(i,...)
if type(v)=='number' then
--do something
print(v)
end
end
end
luaFunc (1,'a',nil,2) ]
-- Output
1
2
+0
,效果很好,谢谢。 – VahidM 2013-03-25 13:45:42
答
也尝试这样的:
function luaFunc (...)
local t=table.pack(...)
for i=1,t.n do
local v=t[i]
if type(v)=='number' then
print(i,v)
end
end
end
luaFunc(10,20,"hello",40,nil,60,print,99)
它停在不是在第一个非数字参数的第一为零的说法。 – lhf 2013-03-25 12:25:36
那就对了,谢谢lhf。 – VahidM 2013-03-25 13:36:23
如果你阅读ipairs的文档,它会明确告诉你它是这样做的。我认为你在这里寻找的是'pairs'函数,它迭代表中的所有键(不一定按顺序)。 – 2013-03-25 16:26:28