__pairs()和__ipairs()元方法根本不起作用

我不知道我做错了什么。基本上,代码看起来像这样:

local t = setmetatable({}, {__pairs = function (self)
    print "Message from __pairs()"
    return function ()
        ...
    end
end})
for k, v in pairs(t) do ... end

__ipairs()也是一样。重载了的元方法根本不被调用 - 没有控制台输出,没有自定义迭代。相反,我得到的结果就像我在迭代没有元表的表。到底怎么了?

原文链接 https://stackoverflow.com/questions/70466069

点赞
stackoverflow用户1442917
stackoverflow用户1442917

你可能使用的是 Lua 5.1(或其衍生版本),这个版本没有支持这些元方法,因为这些元方法是在 Lua 5.2 中加入的。我已经在 Lua 5.2-5.4 中进行了测试并确认了你的代码可以在这些版本中运行(该方法被调用)。

2021-12-23 19:12:37