1

我不知道我做错了什么。基本上代码如下所示:

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

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

4

1 回答 1

2

您很可能使用 Lua 5.1(或其衍生版本),它不支持这些元方法,因为这些元方法是在 Lua 5.2 中引入的。我已经在 Lua 5.2-5.4 中进行了测试,并确认您的代码在那里工作(该方法被调用)。

于 2021-12-23T19:12:37.447 回答