Что такое "n" в возвращаемом значении сопрограммы?
У меня есть следующая сопрограмма и таблица, которые выглядят так:
co = coroutine.create(function(...)
for item in pairs(table.pack(...)) do
coroutine.yield(item)
end
coroutine.yield('Evil')
return 'NO!'
end)
values = {1, 2, 3, 4, 5, 6}
Когда я вызвал резюме, оно выдает значение, как ожидалось, и неожиданно выдает n
до Evil
> coroutine.resume(co, table.unpack(values))
true 1
> coroutine.resume(co, table.unpack(values))
true 2
> coroutine.resume(co, table.unpack(values))
true 3
> coroutine.resume(co, table.unpack(values))
true 4
> coroutine.resume(co, table.unpack(values))
true 5
> coroutine.resume(co, table.unpack(values))
true 6
> coroutine.resume(co, table.unpack(values))
true n -- Here we have n
> coroutine.resume(co, table.unpack(values))
true Evil
> coroutine.resume(co, table.unpack(values))
true NO!
Что значит n
стоять за?
1 ответ
Решение
Начиная с Lua 5.2 (наверное), table.pack()
работает как {...}
, но добавляет поле 'n', в котором хранится количество элементов. Это ключ 'n', который вы получаете.
Обратите внимание, что вы перечисляете только ключи, а не сами значения.
Если вы не хотите, чтобы "н", используйте ipairs()
вместо pairs()
,