有沒有人知道lua 5.2的實際執行情況。 metamethod __pairs
?換句話說,如何在metatable中實現__pairs
作爲元方法,使其與pairs()
完全相同?lua __pairs的實際執行是什麼?
我需要覆蓋__pairs
,並且想要跳過一些我在表中添加的虛擬變量。
有沒有人知道lua 5.2的實際執行情況。 metamethod __pairs
?換句話說,如何在metatable中實現__pairs
作爲元方法,使其與pairs()
完全相同?lua __pairs的實際執行是什麼?
我需要覆蓋__pairs
,並且想要跳過一些我在表中添加的虛擬變量。
下面的代碼會跳過一些條目。根據需要調整。
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'應該是本地的。而且,它比默認的「雙」更加不合需要。 – Deduplicator
非常感謝。這更好。 :) – user2872907
下面將使用元表元,明確規定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
謝謝!這應該走了! – user2872907
http:// lua-use rs.org/wiki/GeneralizedPairsAndIpairs – hjpotter92