协程返回值中的"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}

当我调用 resume 时,按预期产生值,然后突然在 Evil 之前产生了 n

> 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 -- 在这里,我们有了 n
> coroutine.resume(co, table.unpack(values))
true    Evil
> coroutine.resume(co, table.unpack(values))
true    NO!

n 代表什么?

点赞
用户5675002
用户5675002

自从 Lua 5.2(我猜)开始,table.pack() 就可以像 {...} 一样工作,但添加一个存储项目数量的字段' n ',这就是你得到的' n '键。

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

如果您不想要那个 'n',请改用ipairs() 而不是pairs()

2016-11-23 13:38:15