2015-04-11 11 views
8

Ogólnie składnia:Czy next() szuka metametodu __pairs?

for k, v in pairs(t) do 
    .... 
end 

odpowiada:

for k, v in next, t do 
    .... 
end 

Ale co jeśli t ma __pairs metamethod? Czy standardowa funkcja next() sprawdzi to? Jeśli nie, czy nie jest lepiej zawsze używać pairs podczas iteracji nad tabelami i nigdy nie dzwonić bezpośrednio pod numer next()?

Odpowiedz

5

Nie, next() nie sprawdza dla __pairs. The manual nie mówi tak.

Można dwukrotnie potwierdzić z powiązanego kodu źródłowego, porównać luaB_pairs i luaB_next.

Może się zdarzyć, że nie chcą sprawdzić __pairs metamethod, dlaczego więc powiedzieć zawsze użytku pairs nad next?

Powiązane problemy