1

我在文件 main.lua 中有以下代码:

local table = {data={a=1,b=2,c=3}}
setmetatable(table, table)

function table:__pairs()
    return pairs(self.data)
end

function table:__tostring()
    return "a table"
end

print(table)

for e in pairs(table) do
    print(e)
end

当我运行时,lua main.lua我得到输出

a table
a
b
c

当我运行时,love ~/path/to/project我得到输出

a table
__tostring
data
__pairs

为什么 love 正确使用其他元方法,而不是对?

我有 LOVE 11.3 (Mysterious Mysteries) 和 Lua 5.3.5

4

1 回答 1

1

Love2D 使用 LuaJIT 作为其默认解释器,该解释器固定为 Lua 5.1。虽然您可以为标准 Lua 5.1 解释器重建 Love2D,但使其使用标准 Lua 解释器的现代版本将需要大量代码破解,因为 5.2+ 不向后兼容。

而且 Lua 5.1 没有pairs元方法。

于 2019-08-10T15:27:37.850 回答