2013-04-22 38 views
1

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

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

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

谁能帮我在这吗?

是的,你能不能请回答,而不是倒投票?

+1

你期待什么结果? – 2013-04-22 16:37:39

回答

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

你需要小心在args“洞”

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图书馆。

相关问题