yield是不是有点象断点?

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

相比之下还有另一种开发就是比较常见的 javascript 异步程序。
yakczh
2013-09-02 09:52:20 +08:00
thead.join呢,也应该是pause主线程吧
seeker
2013-09-02 10:17:25 +08:00
那个语言的yeild?c# ruby scala还是其他?
dorentus
2013-09-02 10:27:07 +08:00
@msg7086 ruby 和 python 的 yield 不是一个东西。


@seeker 发在 python 节点,自然是 python 的 yield。
yakczh
2013-09-02 10:30:14 +08:00
@seeker 是python
6711411
2013-09-02 10:44:18 +08:00
@meg7086 @dorentus ruby 有两个 yield, 一个 call block 一个 Fiber.yield
msg7086
2013-09-02 16:32:43 +08:00
@dorentus 好像实现起来稍微有一些不同

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

f { print i }

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

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

求指导
tioover
2013-09-03 01:59:19 +08:00
才想起来,我写程序那么多年还没用过断点呢

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

https://www.v2ex.com/t/80925

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

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

© 2021 V2EX