协程返回值中的“n”是什么?

时间:2016-11-23 13:32:09

标签: lua lua-5.3

我有以下协程和表格,如下所示:

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 个答案:

答案 0 :(得分:2)

自Lua 5.2(我猜)以来,table.pack()作为{...}使用,但添加字段' n'存储项目数量。那是' n'你得到的关键。

请注意,您只列出了键,而不是值本身。

如果您不想要' n,请使用ipairs()代替pairs()