lua 5.2の実際の実装を知っている人はいますか。メタメソッド__pairs
? つまり、メタテーブルでメタメソッドとして実装__pairs
して、まったく同じように動作させるにはどうすればよいpairs()
ですか?
オーバーライドする必要があり__pairs
、テーブルに追加するいくつかのダミー変数をスキップしたいと考えています。
lua 5.2の実際の実装を知っている人はいますか。メタメソッド__pairs
? つまり、メタテーブルでメタメソッドとして実装__pairs
して、まったく同じように動作させるにはどうすればよいpairs()
ですか?
オーバーライドする必要があり__pairs
、テーブルに追加するいくつかのダミー変数をスキップしたいと考えています。
以下は、メタ可能なメタを使用して、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
以下のコードは、いくつかのエントリをスキップします。必要に応じて適応します。
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