Lua程序设计之协同

转自http://blog.csdn.net/avenccssddnn/article/details/7931160

LUA协同程序当中,resume-yield可以用来传递交换信息


情况一:

1.1当协同程序主函数没有参数时,如:

c = coroutine.create(function() print 'ONE' end)

用resume时,传入除c协同对象外,还有其他参数,其他参数将被忽略。
coroutine.resume(c,xx)
1.2当协同程序主函数有参数a,b时,如:

c = coroutine.create(function(a,b) print a..'ONE' .. b end)

调用resume时传入参数a,b时,a,b被传入主函数内
coroutine.resume(c,a,b) -- 打印a ONE b
情况二:

在讲之前,我们讲一下resume的返回值,resume函数采用了前面讲过的保护模式,即实现包含在pcall函数之内,所以其返回失败格式:false error info 返回成功 true + 协同主函数内return返回值,或者是yeild函数的返回值
如果协同程序主函数中调用了yield函数

2.1当yield函数有参数时,如时resume传入了多余参数,yeild的参数将被作为resume的返回值,举例如下

c = coroutine.create(function(a,b) coroutine.yeild(a+b,a*b) end)

print(coroutine.resume(c,1,2)) -- true 3,2 (说明1+2=3,1*2 =2)
2.2当yield函数没有参数时,如时resume传入了多余参数,所有多余参数将被作为resume的返回值,举例如下

c = coroutine.create(function(a,b) coroutine.yeild() end)

print(coroutine.resume(c,1,2)) -- true 1,2
情况三:

协同主函数内并没有调用yeild函数,只包含return 语句时,举例如下:

c = coroutine.create(function() return "hellor" end)
print(coroutine.resume(c)) --true hellor 返回值被resume当作返回值
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值