2013-03-25 95 views
1

我试图编写一个具有可变数量参数的函数,该参数为其所有数字条目执行某些操作。所以我想出了这样的事情:在具有可变数量参数的Lua函数中处理参数

function luaFunc (...) 
    for i,v in ipairs{...} do 
     if type(v)=='number' then 
     --do something 
     end 
    end 
end 

但是当我运行这个,它停止正确的第一个非数字参数。有什么问题?

+3

它停在不是在第一个非数字参数的第一为零的说法。 – lhf 2013-03-25 12:25:36

+0

那就对了,谢谢lhf。 – VahidM 2013-03-25 13:36:23

+1

如果你阅读ipairs的文档,它会明确告诉你它是这样做的。我认为你在这里寻找的是'pairs'函数,它迭代表中的所有键(不一定按顺序)。 – 2013-03-25 16:26:28

回答

1
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

1

也尝试这样的:

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) 
+0

也很有用。谢谢。顺便说一句,为什么迭代与ipairs不工作?该元素有一个键,其值为零。 – VahidM 2013-03-25 15:54:07

+1

@VahidM,'ipairs'使用表中的##运算符来确定有多少个元素,但'#'对于带有孔的表没有用处(nil项)。 – lhf 2013-03-25 16:05:34

+0

我刚刚测试了#运算符的表与无条目,它工作正常。它一定是别的东西。不管怎样,谢谢你。 – VahidM 2013-03-25 16:26:44