我有一段非常简单的Lua代码,它是我在自学协程如何工作时编写的。
我一直都很好,直到我去了紧身衣。
spec
国家:
紧身衣(F)
使用body f创建新的协同程序。
f必须是Lua函数。返回A
恢复协同程序的函数
每次打电话。任何论点
传递给函数的行为与
要继续的额外参数。返回
resume返回的值相同,但
第一个布尔值。如果出现错误,
传播错误。
但是,本规范:
Enumeration = {}
Enumeration.Create = function(generator)
return coroutine.wrap(generator, coroutine.yield)
end
local function TestEnumerator(yield)
yield(1) --ERROR HERE
yield(2)
yield(3)
end
local enumerator = Enumeration.Create(TestEnumerator)
local first = enumerator()
local second = enumerator()
local third = enumerator()
print (first, second, third)
抱怨收益率为零(在我上面标记的行上)。据我所知,yield应该是传递到coroutine.wrap的第二个论点,那么我哪里出错了呢?
非常明显的解决方案,感谢下面的答案
Enumeration.Create = function(generator)
local iter = coroutine.wrap(generator, coroutine.yield)
return function()
return iter(coroutine.yield)
end
end