为什么 love2d 不使用我自定义的配对元方法?
Why doesn't love2d use my custom-defined pairs metamethod?
我在文件 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 正确使用其他元方法,而不是成对使用?
I have LOVE 11.3 (Mysterious Mysteries) and Lua 5.3.5
Love2D 使用 LuaJIT 作为其默认解释器,固定为 Lua 5.1。虽然您可以为标准 Lua 5.1 解释器重建 Love2D,但要使其使用标准 Lua 解释器的现代版本将需要大量代码修改,因为 5.2+ 不向后兼容。
并且 Lua 5.1 没有 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 正确使用其他元方法,而不是成对使用?
I have LOVE 11.3 (Mysterious Mysteries) and Lua 5.3.5
Love2D 使用 LuaJIT 作为其默认解释器,固定为 Lua 5.1。虽然您可以为标准 Lua 5.1 解释器重建 Love2D,但要使其使用标准 Lua 解释器的现代版本将需要大量代码修改,因为 5.2+ 不向后兼容。
并且 Lua 5.1 没有 pairs
元方法。