1

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

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当我调用 resume 时,它​​按预期产生值并在之前突然产生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

4

1 回答 1

2

由于 Lua 5.2(我猜),table.pack()作为{...},但添加了存储项目数的字段 'n'。这就是你得到的'n'键。

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

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

于 2016-11-23T13:38:15.710 回答