为什么love2d不使用我自定义的pairs元方法?

我在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使用其他元方法是正确的,但不是pairs元方法?

我使用的是LOVE 11.3(神秘之谜)和Lua 5.3.5

点赞
用户734069
用户734069

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

而Lua 5.1没有pairs元方法。

2019-08-10 15:27:37