Lua 中简单协程的困惑问题



我正在学习Lua并尝试创建一个简单的协程。在 Lua 5.1 中,下面的代码给出了错误:"尝试跨元方法/C 调用边界生成。我已经阅读了有关该限制的信息,但我看不到它如何应用于我的代码。我在 Lua 5.2 中尝试过,并得到了"尝试从协程外部产生",这对我来说同样令人困惑。我相信答案会非常明显!

output = {}
done = false
function mainLoop()
while not done do
if co == nil then
co = coroutine.create(subLoop())
elseif coroutine.status(co) == "suspended" then
print(output[k])
coroutine.resume(co)
elseif coroutine.status(co) == "dead" then
done = true
end
end
end
function subLoop()
for k=1, 20 do
table.insert(output, "This is line " .. k .. " of the test output")
coroutine.yield()
end
end
mainLoop()

你正在打电话给subLoop

if co == nil then
co = coroutine.create(subLoop())

而不是将其传递给coroutine.create

if co == nil then
co = coroutine.create(subLoop)

这会导致您尝试从主状态/(不是真正的(协程yield,这会产生不同版本描述的错误。

最新更新