yield是不是有点象断点?

2013 年 9 月 1 日
 yakczh
提前设置断点,然后在调用next触发
4716 次点击
所在节点    Python
14 条回复
timonwong
2013 年 9 月 1 日
continuation
mikawudi
2013 年 9 月 1 日
csharp的?感觉更像迭带器模式的语法糖.
msg7086
2013 年 9 月 1 日
从Ruby角度来说,相当于call block
cj1324
2013 年 9 月 1 日
yield 还能带参数。
harmy
2013 年 9 月 1 日
你可以把它想象成小叮当的传送门
Ryannnnnnn
2013 年 9 月 2 日
你可以把它想象成小叮当的传送门
Mutoo
2013 年 9 月 2 日
协同程序(coroutine)是另一种有趣的开发方式,用起来确实有点像“断点”的感觉,但是它只pause一个coroutine而不影响其它线程。并且可以在yield和resume的时候交换数据。而且很容易用协同程序实现waitSecond();waithSignal();之类的方法,所以经常被使用在游戏开发中,实现剧情对话、AI之类的。

相比之下还有另一种开发就是比较常见的 javascript 异步程序。
yakczh
2013 年 9 月 2 日
thead.join呢,也应该是pause主线程吧
seeker
2013 年 9 月 2 日
那个语言的yeild?c# ruby scala还是其他?
dorentus
2013 年 9 月 2 日
@msg7086 ruby 和 python 的 yield 不是一个东西。


@seeker 发在 python 节点,自然是 python 的 yield。
yakczh
2013 年 9 月 2 日
@seeker 是python
6711411
2013 年 9 月 2 日
@meg7086 @dorentus ruby 有两个 yield, 一个 call block 一个 Fiber.yield
msg7086
2013 年 9 月 2 日
@dorentus 好像实现起来稍微有一些不同

比如ruby里
def f:
yield 5
print 'a'
end

f { print i }

这里的yield 5就相当于 (print i)(5)

python似乎会把这个流程反过来做?因为根据说明上写的,yield以后的常规语句 print 'a' 会被略过执行。

求指导
tioover
2013 年 9 月 3 日
才想起来,我写程序那么多年还没用过断点呢

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://study.congcong.us/t/80925

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX