永发信息网

lua中dofile运行函数中的io.read(),怎么无法输入,输出出错

答案:5  悬赏:30  手机版
解决时间 2021-03-19 04:37
我照书上写的代码:

function receiver (prod)
local status,value=coroutine.resume(prod)
return value
end
function send(x)

coroutine.yield(x)
end
function producer()

return coroutine.create(function()
while true do
local x=io.read()
print "ajdjd"
send(x)
end
end)
end
function filter(prod)

return coroutine.create(function()
for line=1,math.huge do
local x=receiver(prod)
x=string.format("%5d %s",line.x)
send(x)
end
end)
end

function consumer(prod)
while true do
local x=receiver(prod)
io.write(x,"\n")
end
end
在dofile了后,输入consumer(filter(producer()))后出现死循环输出cannot resume deadcoroutine,为什么io.read没让我输入,求解释,谢谢了
我用的是linux下的lua 5.0版本,见谅!
最佳答案
我照书上写的代码:

function receiver (prod)
local status,value=coroutine.resume(prod)
return value
end
function send(x)

coroutine.yield(x)
end
function producer()

return coroutine.create(function()
while true do
local x=io.read()
print "ajdjd"
send(x)
end
end)
end
function filter(prod)

return coroutine.create(function()
for line=1,math.huge do
local x=receiver(prod)
x=string.format("%5d %s",line.x)
send(x)
end
end)
end

function consumer(prod)
while true do
local x=receiver(prod)
io.write(x,"\n")
end
end
在dofile了后,输入consumer(filter(producer()))后出现死循环输出cannot resume deadcoroutine,为什么io.read没让我输入,求解释,谢谢了我用的是linux下的lua 5.0版本,见谅!
全部回答
coroutine 是Lua 5.2+才有的 程序中肯定是出现了prod已经完成或返回(return),而你又要恢复(resume)执行prod代码导致这个错误. 使用 coroutine.status(prod) 测试一下哪一步已经为dead, 如果你还继续恢复(resume)执行那就出错了. 英文解释: If we try to resume again a pair of values is returned: "cannot resume dead coroutine" Once a coroutine exits or returns like a function it cannot be resumed.
coroutine 是Lua 5.2+才有的 程序中肯定是出现了prod已经完成或返回(return),而你又要恢复(resume)执行prod代码导致这个错误. 使用 coroutine.status(prod) 测试一下哪一步已经为dead, 如果你还继续恢复(resume)执行那就出错了. 英文解释: If we try to resume again a pair of values is returned: "cannot resume dead coroutine" Once a coroutine exits or returns like a function it cannot be resumed.
coroutine 是Lua 5.2+才有的 程序中肯定是出现了prod已经完成或返回(return),而你又要恢复(resume)执行prod代码导致这个错误. 使用 coroutine.status(prod) 测试一下哪一步已经为dead, 如果你还继续恢复(resume)执行那就出错了. 英文解释: If we try to resume again a pair of values is returned: "cannot resume dead coroutine" Once a coroutine exits or returns like a function it cannot be resumed.
coroutine 是Lua 5.2+才有的 程序中肯定是出现了prod已经完成或返回(return),而你又要恢复(resume)执行prod代码导致这个错误. 使用 coroutine.status(prod) 测试一下哪一步已经为dead, 如果你还继续恢复(resume)执行那就出错了. 英文解释: If we try to resume again a pair of values is returned: "cannot resume dead coroutine" Once a coroutine exits or returns like a function it cannot be resumed.
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
真的不知道该把自己放在一个什么样的位置,有
台电平板电脑静音怎么关 一直都关不掉 右上角
我是一个大学刚毕业的大学生,现在进了一家设
百味香速冻食品批发我想知道这个在什么地方
我家以前安装过有线电视自从有机顶盒我就不用
谁有虎哥的故事第三部(同归)急求(>﹏<)
短文改错(要翻译)
琼瑶发千字告别什么意思
情人节看什么电视剧?
我从小家里穷,读书没钱都是学校和好心人的帮
黑加仑干和野生蓝莓干的储存方式
餐饮招小时工19元每小时怎么写招聘信息
龙郡地址有知道的么?有点事想过去
吉林银行信用卡可以取款吗
怎么轻易辨别特步鞋的真伪谢谢了,大神帮忙啊
推荐资讯
(口 十60)x(2o7一201)=468
年底了寻小区物业年终总结一份
过了批次线,,就一定能上大学吗
婚纱摄影宜兴有哪些店
我前段时间捷信分期了一部手机逾期了几个月没
宁夏禾家丰设施农业服务有限公司这个地址在什
我在中国银行办的购房贷款,赶上了这次利率上
有没有寒战2的资源?
我是江苏人,嫁到湖北,户口未迁入。报名学车
投资的反义词是什么
入户广州要找什么部门办理
南艺考了360名,南艺在外省招211人,我安徽美
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?