3

在我的 Lua 脚本中,我有多个使用相同“结构”的库。例如,我有一个包含require('b')和.lua 的内容require('c')。b.lua 和 c.lua 都有 info 函数。b.lua 让它打印“b”,c.lua 让它打印“c”。在 a.lua 中,我想使用来自 B.lua 或 C.lua 的 info() 启动协程。

这是我的 b.lua:

b = {}
function b.info()
  coroutine.yield()
  print("b")
  print("b2")
end

C.lua 有一个类似的结构,但大多数 B 都被 C 替换了。当试图启动协程时local co = coroutine.create(b.info())(这也很奇怪,因为它通常开始挂起)我收到一个错误,比如“尝试跨越元方法/C 调用边界”。

4

1 回答 1

4

coroutine.create(b.info())恢复b.info 之前的通话co

您需要传递一个函数,而不是函数调用,如

local co = coroutine.create(b.info)
coroutine.resume(co)        -- prints nothing
coroutine.resume(co)        -- prints b, b2

或者

co = coroutine.wrap(b.info)
co()
co()
于 2013-10-22T15:12:05.183 回答