我正在创建一个Array类,它为表添加了更多的用法。我有一个元方法,它允许我组合两个表,例如:
阵列(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")
这是标准的Lua行为:在用逗号分隔的函数调用的枚举中,只有最后一个可以返回多个结果。例如:
> function f() return 1, 2, 3 end
> print(f(), f())
1 1 2 3
如果我是你,我会做一件简单的事情,并使用for
循环。