JavaScript生成器(Generator)和Lua协程(Coroutine)如何传入值的区别

原理一样,本质都是协程。但是前者function*是“生成”生成器的函数,需要调用它才能得到生成器,而后者coroutine.create()返回的已经是协程了;前者调用之时可以通过参数往里传值,所以第一次next()无需再传,而后者必须通过第一次resume()传递。例如下面两段等效的JS和Lua代码:

function* generator(a) {
    console.log(a);
    console.log(yield);
    console.log(yield);
}
let gen = generator(1);
gen.next();
gen.next(2);
gen.next(3);
local co =
    coroutine.create(
    function(a)
        print(a)
        print(coroutine.yield())
        print(coroutine.yield())
    end
)
coroutine.resume(co, 1)
coroutine.resume(co, 2)
coroutine.resume(co, 3)

输出都一样,都是

1
2
3

话说如果Lua设计成coroutine.create(fn, ...),就和JS差不多了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值