将表转换为...并返回它

时间:2013-04-22 16:13:05

标签: lua lua-table

美好的一天,我想知道如何将表转换为...并将其返回。

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);

我尝试了所有可能的方法,这些方法在我的脑海里,但没有成功:(

请问有人帮我吗?

是的,你能否回答而不是投票?!

2 个答案:

答案 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库。