Lua __pairs 的实际实现是什么?

有人知道lua5.2中元方法__pairs的实际实现吗?换句话说,我如何在metatable中实现__pairs作为元方法,以便它与pairs()完全相同?

我需要覆盖__pairs并且想跳过我在表中添加的一些虚拟变量。

点赞
用户107090
用户107090

下面的代码跳过了某些条目。根据需要进行适应。

local m={
January=31, February=28, March=31, April=30, May=31, June=30,
July=31, August=31, September=30, October=31, November=30, December=31,
}

setmetatable(m,{__pairs=
function (t)
    local k=nil
    return
    function ()
        local v
        repeat k,v=next(t,k) until v==31 or k==nil
        return k,v
    end
end})

for k,v in pairs(m) do print(k,v) end
2014-05-13 11:22:25
用户3204551
用户3204551

以下内容会使用元表 meta 显式地提供 pairs 的默认行为:

function meta.__pairs(t)
  return next, t, nil
end

现在,要跳过特定的元素,我们必须替换返回的 next

function meta.__pairs(t)
  return function(t, k)
    local v
    repeat
      k, v = next(t, k)
    until k == nil or theseok(t, k, v)
    return k, v
  end, t, nil
end

参考文献:Lua 5.2 手册,pairs

2014-05-13 16:00:37