如何解决解压缩问题?

我正在创建一个Array类,可以使表的使用更加方便。我有一个元方法,可以让我将两个表合并,比如:

Array(5) .. Array(6, 10) 应该得到 {5, 6, 10}

我知道我可以使用两个循环来完成这个操作,但我正在尝试让我的代码尽可能清晰和高效。我在unpack上遇到了一个问题。我正在尝试连接两个表,但它没有包括所有的值。这是我的代码和输出:

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) --合并两个数组
print(x:concat(", "))

输出:5, 6, 9(我希望它是 "5, 12, 13, 6, 9")

点赞
用户204011
用户204011

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

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

如果我是你,我会简单地使用 for 循环。

2014-11-10 08:08:48