如何解决这个解包问题?

时间:2014-11-10 03:41:58

标签: lua metatable meta-method

我正在创建一个Array类,它可以为表添加更多用法。我有一个metamethod,允许我组合两个表,例如:

数组(5)..数组(6,10)应该给你{5,6,10}

我知道我可以使用两个循环来执行此操作,但我正在努力使我的代码尽可能干净和高效。解压缩我遇到了一个问题。我正在尝试连接两个表,但它不包括所有值。这是我的代码和输出:

local Array = {}
Array.__index = Array

function Array.__concat(self, other)
    return Array.new(unpack(self), unpack(other))
end

function Array:concat(pattern)
    return table.concat(self, pattern)
end

function Array.new(...)
    return setmetatable({...}, Array)
end

setmetatable(Array, {__call = function(_, ...) return Array.new(...) end})

local x = Array(5, 12, 13) .. Array(6, 9) --concatenate two arrays
print(x:concat(", "))

OUTPUT: 5, 6, 9 (I want it to be "5, 12, 13, 6, 9")

1 个答案:

答案 0 :(得分:7)

这是标准的Lua行为:在用逗号分隔的函数调用的枚举中,只有最后一个可以返回多个结果。例如:

> function f() return 1, 2, 3 end
> print(f(), f())
1    1    2    3

如果我是你,我会做一件简单的事情并使用for循环。