Ищет ли next() метаметод __pairs?

В общем, синтаксис:

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

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

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

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

1 ответ

Решение

Нет, next() не проверяет __pairs, Руководство не говорит так.

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

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

Другие вопросы по тегам