7

lua 5.2の実際の実装を知っている人はいますか。メタメソッド__pairs? つまり、メタテーブルでメタメソッドとして実装__pairsして、まったく同じように動作させるにはどうすればよいpairs()ですか?

オーバーライドする必要があり__pairs、テーブルに追加するいくつかのダミー変数をスキップしたいと考えています。

4

2 に答える 2

4

以下は、メタ可能なメタを使用して、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マニュアル、ペア

于 2014-05-13T16:00:37.083 に答える
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 
于 2014-05-13T11:22:25.823 に答える