2015-04-11 4 views
8

В общем, синтаксис:Делает ли next() поиск метаданных __pairs?

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

эквивалентно:

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

Но что, если t имеет __pairs метаметод? Будет ли проверяться эта функция next()? Если нет, то не лучше ли всегда использовать pairs при переходе по столам и никогда не звонить next()?

ответ

5

No, next() не проверяет за __pairs. The manual так не говорит.

Его можно удвоить, подтвердив соответствующий исходный код, сравните luaB_pairs и luaB_next.

Там могут быть случаи, когда вы не хотите проверить __pairs Метаметод, так почему говорят всегда использования pairs над next?

Смежные вопросы