美好的一天,我想知道如何将表转换为...并将其返回。
function GetArgsNormal(...)
return ...;
end
local a,b,c=GetArgsNormal(1,2,3); --this works
print("a b c:",a,b,c);
function GetArgsTable(t,...)
for i,v in pairs(t)do
({...})[i]=v;
end
return ...;
end
local d,e,f=GetArgsTable({1,2,3},nil); --result: d=nil, e=nil, f=nil
print("def:",d,e,f);
我尝试了所有可能的方法,这些方法在我的脑海里,但没有成功:(
请问有人帮我吗?
是的,你能否回答而不是投票?!
答案 0 :(得分:2)
local d,e,f = unpack({1,2,3}); --result: d=1, e=2, f=3
function f()
local t = {}
-- fill table t
return unpack(t)
end
答案 1 :(得分:1)
你需要小心args中的'holes'
function GetArgsTable(t,...)
local argc, argv = select("#", ...), {...}
-- #argv ~= argc
-- unpack(argv) ~= ...
-- assume t is array
for i,v in ipairs(t) do
argc = argc + 1
argv[argc] = v;
end
return unpack(argv, 1, argc); -- use explicit array size
end
print(GetArgsTable({1,2}, nil,'hello', nil)) -- nil hello nil 1 2
或者你可以看看lua-vararg库。