【问题标题】:what is actual implementation of lua __pairs?lua __pairs 的实际实现是什么?
【发布时间】:2014-06-30 17:07:53
【问题描述】:

有人知道 lua 5.2 的实际实现吗?元方法__pairs?换句话说,我如何将__pairs 实现为元表中的元方法,以便它与pairs() 完全相同?

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

【问题讨论】:

标签: lua metatable lua-5.2 meta-method


【解决方案1】:

下面的代码跳过了一些条目。根据需要进行调整。

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 

【讨论】:

  • v 应该是本地的。此外,它与默认的 pairs 的差异远远超出了需要。
  • 非常感谢。这甚至更好。 :)
【解决方案2】:

以下将使用元表元显式提供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 manual, pairs

【讨论】:

  • 谢谢!这应该走!
猜你喜欢
  • 1970-01-01
  • 2020-07-26
  • 2019-05-27
  • 2021-05-12
  • 2011-08-01
  • 2011-12-26
  • 1970-01-01
  • 2014-11-24
  • 1970-01-01
相关资源
最近更新 更多