在我的Lua脚本中,我有多个使用相同的"结构"的库。例如,我有一个.lua包含require('b')
和require('c')
的内容。b.lua 和 c.lua都有一个信息函数。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 调用边界屈服"的错误。
coroutine.create(b.info())
在恢复co
之前调用b.info
。
您需要传递一个函数,而不是函数调用,如
local co = coroutine.create(b.info)
coroutine.resume(co) -- prints nothing
coroutine.resume(co) -- prints b, b2
或
co = coroutine.wrap(b.info)
co()
co()