簡體   English   中英

什么是lua __pairs的實際實現?

[英]what is actual implementation of lua __pairs?

有沒有人知道lua 5.2的實際實現。 metamethod __pairs 換句話說,如何在metatable中實現__pairs作為metamethod,以便它與pairs()完全相同?

我需要覆蓋__pairs並想跳過我在表中添加的一些虛擬變量。

以下將使用metatable元明確提供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手冊,配對

下面的代碼會跳過一些條目。 根據需要進行調整。

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 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM