2014-05-13 11 views
6

Kennt jemand tatsächliche Implementierung von Lua 5.2. metamethod __pairs? Mit anderen Worten, wie implementiere ich __pairs als Metamethode in einem Metatable, so dass es genau so funktioniert mit pairs()?Was ist die tatsächliche Implementierung von Lua __pairs?

Ich muss __pairs überschreiben und einige Dummy-Variablen, die ich in einer Tabelle hinzufügen möchte.

+0

http: // lua-use rs.org/wiki/GeneralizedPairsAndIpairs – hjpotter92

Antwort

0

Der folgende Code überspringt einige Einträge. Bei Bedarf anpassen.

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 
+0

'v' sollte ein lokaler sein. Außerdem weicht es viel mehr von den Standardpaaren ab als benötigt. – Deduplicator

+0

Vielen Dank. das ist noch besser. :) – user2872907

3

Nachfolgend ist die Metatabelle Meta explizit pairs Standard bereitzustellen Verhalten verwenden würde:

function meta.__pairs(t) 
    return next, t, nil 
end 

nun für das Überspringen bestimmter Elemente, müssen wir ersetzen die zurück next: Für

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 

Referenz: Lua 5.2 manual, pairs

+1

Danke! Das sollte laufen! – user2872907

Verwandte Themen