2014-05-13 5 views
6

루아 5.2의 실제 구현을 아는 사람이 있습니까? metamethod __pairs? 즉, 과 정확히 동일하게 작동하도록 메타 테이블에서 메타 메서드로 __pairs을 구현하려면 어떻게해야합니까?루아 __pairs의 실제 구현은 무엇입니까?

__pairs을 덮어 쓰고 테이블에 추가하는 더미 변수를 건너 뛰고 싶습니다.

+0

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

답변

0

아래 코드는 일부 항목을 건너 뜁니다. 필요에 따라 조정하십시오.

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'는 로컬이어야합니다. 또한, 필요한 것보다 훨씬 더 많은 기본 쌍들과 갈라집니다. – Deduplicator

+0

고마워요. 이것은 훨씬 나아졌습니다. :) – user2872907

3

메타 테이블 메타를 사용합니다 다음은 명시 적으로 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 manual, pairs

+1

고마워요! 이건 걸어야 해! – user2872907