为什么这个简单的 Lua 协程不工作?
2010-7-3 1:32:55
收藏:0
阅读:135
评论:1
我有一小段非常简单的 Lua 代码,当我自学 coroutine 的时候编写了它。
当我到达 coroutine.wrap 时,规范表明:
coroutine.wrap (f)
创建一个新的 coroutine,它有一个 f 的主体。 f 必须是 Lua 函数。返回一个函数, 每次它被调用时,恢复 coroutine。 传递给该函数的任何参数都对应于 resume 时额外的参数。返回与 resume 返回的相同的值,除了第一个布尔值。在出错的情况下,向上传播错误。
然而,这段代码:
Enumeration = {}
Enumeration.Create = function(generator)
return coroutine.wrap(generator, coroutine.yield)
end
local function TestEnumerator(yield)
yield(1) -- 在此处出现错误
yield(2)
yield(3)
end
local enumerator = Enumeration.Create(TestEnumerator)
local first = enumerator()
local second = enumerator()
local third = enumerator()
print (first, second, third)
抱怨 yield 是 nil(我已经标记的那一行)。据我所知,yield 应该是传入 coroutine.wrap 的第二个参数,那么我错在哪里了?
非常明显的解决方案,感谢下面的答案
Enumeration.Create = function(generator)
local iter = coroutine.wrap(generator, coroutine.yield)
return function()
return iter(coroutine.yield)
end
end
原文链接 https://stackoverflow.com/questions/3169946
点赞
评论区的留言会收到邮件通知哦~
推荐文章
- 如何在roblox studio中1:1导入真实世界的地形?
- 求解,lua_resume的第二次调用继续执行协程问题。
- 【上海普陀区】内向猫网络招募【Skynet游戏框架Lua后端程序员】
- SF爱好求教:如何用lua实现游戏内调用数据库函数实现账号密码注册?
- Lua实现网站后台开发
- LUA错误显式返回,社区常见的规约是怎么样的
- lua5.3下载库失败
- 请问如何实现文本框内容和某个网页搜索框内容连接,并把网页输出来的结果反馈到另外一个文本框上
- lua lanes多线程使用
- 一个kv数据库
- openresty 有没有比较轻量的 docker 镜像
- 想问一下,有大佬用过luacurl吗
- 在Lua执行过程中使用Load函数出现问题
- 为什么 neovim 里没有显示一些特殊字符?
- Lua比较两个表的值(不考虑键的顺序)
- 有个lua简单的项目,外包,有意者加微信 liuheng600456详谈,最好在成都
- 如何在 Visual Studio 2022 中运行 Lua 代码?
- addEventListener 返回 nil Lua
- Lua中获取用户配置主目录的跨平台方法
- 如何编写 Lua 模式将字符串(嵌套数组)转换为真正的数组?
这不是
coroutine.wrap
的工作方式。在第一次调用enumerator
时必须传递coroutine.yield
。