Lua - 协程库的指定

3

在我的Lua脚本中,我有多个库使用相同的“结构”。例如,我有一个a.lua文件,其中包含require('b')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())启动协程时(通常情况下应该是挂起状态),会出现错误“attempt to yield across metamethod/C-call boundary”。

1个回答

4

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()

我知道,但那与我遇到的错误无关。我的意思是它自动开始很奇怪。我的问题是在尝试yield我的协程时出现了错误。 - scheurneus

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接