Lua - 指定协程库。

在我的Lua脚本中,我有多个使用相同“结构”的库。例如,我有一个包含require('b')require('c')的a.lua。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调用边界进行yield”的错误。

点赞
用户107090
用户107090

coroutine.create(b.info()) 在恢复 co 之前调用了 b.info 函数

你需要传递一个函数,而不是函数 _调用_,如下所示:

local co = coroutine.create(b.info)
coroutine.resume(co)        -- 不会输出任何信息
coroutine.resume(co)        -- 输出 b, b2

或者使用下面的写法:

co = coroutine.wrap(b.info)
co()
co()
2013-10-22 15:12:05