返回信息流rt. 意思都一样?
来自「北邮人论坛手机版」
这是一条镜像帖。来源:北邮人论坛 / python / #8155同步于 2015/8/14
该镜像源已超过 30 天没有更新,可能在源站已被删除。
Python机器人发帖
yield这玩意在哪些语言里有?
tycoon0
2015/8/14镜像同步9 回复
订阅后,新回复会通过你的通知中心匿名送达。
9 条回复
如果指的是coroutine:
这些语言有coroutine:Python, Ruby, Lua, EcmaScript6(最新版JavaScript), modula-2,以及很多很多别的我不知道的。
Erlang和Go有轻量级的多线程,底层可以用coroutine实现。
Java没有coroutine,但有多线程。
C#有yield,但是是通过自动地做代码变换来实现的。
Scheme有更强大的continuation。
C语言没有coroutine,但是Windows提供Fibre,POSIX提供swap_context,可以达到coroutine的目的。从c11开始有多线程。
C++没有coroutine,但是有人给C++提供了SWAP-STACK操作,可以实现coroutine。从C++11开始有多线程。
如果只是yield语句:
Python和EcmaScript6的yield的意思是一样的。
Ruby也有yield,但意思不一样,意思是调用传入的代码块。比如:
def foo
yield 1
yield 2
yield 3
end
foo do |x|
puts x
end
上述代码里的yield只是调用那个do...end块而已,不是coroutine。但Ruby有Fibre,Fibre.yield和Python的yield很像。
Lua没有yield关键字,但coroutine.yield库函数的功能和Ruby的Fibre.yield一样,和Python的yield很像。
膜拜真大神
【 在 nuanyangyang 的大作中提到: 】
: 如果指的是coroutine:
: 这些语言有coroutine:Python, Ruby, Lua, EcmaScript6(最新版JavaScript), modula-2,以及很多很多别的我不知道的。
: Erlang和Go有轻量级的多线程,底层可以用coroutine实现。
: ...................
求暖神讲讲coroutine
【 在 nuanyangyang 的大作中提到: 】
: 如果指的是coroutine:
: 这些语言有coroutine:Python, Ruby, Lua, EcmaScript6(最新版JavaScript), modula-2,以及很多很多别的我不知道的。
: Erlang和Go有轻量级的多线程,底层可以用coroutine实现。
: ...................
【 在 downtown 的大作中提到: 】
: 求暖神讲讲coroutine
http://bbs.byr.cn/#!article/Linux/132235
es6里面出现的yield有个比较有趣的事
异步代码写起来通常比较冗长,处理某些情况也很麻烦,于是就有了co这种用generator来处理异步流程的库,koa就是基于此,所以用koa框架会写出很多yield
不过es7里面有了更直接的async await