lua - 如何解决这个解包问题?

标签 lua metatable meta-method

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

Array(5) .. Array(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环形。

关于lua - 如何解决这个解包问题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26836364/

相关文章:

lua - 继承一个元表(类)并使用其所需的构造函数参数

oop - Lua继承不包括元方法吗?

c++ - 从 C++ 调用 Lua 函数

c# - Mono Tasklet/协程的开销

function - 如何解决 Lua 中的函数依赖循环?

comparison - MEF是微软的Lua版本吗?

oop - 元表在 Lua (5.2) 中为 OOP 服务的目的是什么?

Lua 元表不一致

lua - 如何保存 bool 条件并稍后评估

c++ - LuaPlus:如何让函数返回一个表?