![]() |
1
10
劫持这个词
产量
这里分散了它通常的意图:作为一个入口/出口标记
coroutine
. C语言
在C,
|
![]() |
2
4
是的,你可能想看看这个问题的答案: What is Scala's yield? 以下是scala提供的此类结构的文档: http://www.scala-lang.org/node/111 更新: 本博客讨论了C产量和scala: http://hestia.typepad.com/flatlander/2009/01/scala-for-c-programmers-part-1-mixins-and-traits.html 他详细介绍了与在scala中使用特性相比,如何使用扩展来实现IEnumerable工作。
所以,你是正确的,产量在scala中不会像c那样起作用,但那是因为它们是非常不同的,所以如果你想先做这个试验作为一个特性,那么你可以称之为
|
![]() |
3
4
我认为答案(除了2.8中的变化)是否定的,scala没有类似于c编写迭代器(ienumerable或iterable的实现)的语法糖。 但是,在scala中,您可以通过将一个函数传递给遍历来实现类似的结果,它将对遍历中的每个项调用该函数。这种方法也可以用同样的方式在C中实现。 以下是我如何在不使用yield的情况下用c编写travel:
然后您可以这样使用它:
或者像这样:
|
![]() |
4
3
尽管scala有一个关键字
要在scala中做同样的事情,您可以定义自己的高阶函数。在英语中,这意味着一个以函数为参数的函数。 采取 Microsoft's example ,下面是scala方法:
现在您有了“迭代器”:
笔记:
比例尺:1,C:0 更新:
对于刚刚添加的示例,请编写
在这一点上
如果要使用此“迭代器”,请调用
这是“函数式编程”的一个基本情况,您应该确保理解它,以便在scala中获得成功。 |
![]() |
5
3
您可以在scala>=2.8中使用生成器的分隔延续实现来完成此操作。你需要 continuations plugin 然后沿着这些线,
|
![]() |
6
2
如前所述,您可以使用Continuations插件创建一个生成器,以创建一个行为与C:
|
![]() |
7
0
来自C背景,并且已经从Hotzen调试了scala代码(适用于scala 2.11.6),我必须说,这种延续使用接近C-yield等价物。我不知道如果需要多个生成器,在相同的方法中运行所有的生成器,或者可能分布在不同的方法中,延续是否仍能起到类似的作用,但是我很高兴延续确实存在,这样我就不会被迫使用多个线程来实现类似的效果,或者传递回调。 |
![]() |
Ahmed Elbohoty · Python为什么我在这里没有输出 7 年前 |
![]() |
Aaron_ab · python-yield(yield)做什么? 7 年前 |
![]() |
Chancelot · 块执行的测试ruby屈服方法 7 年前 |
![]() |
georg · 从阵列创建的生成器列表中生成 7 年前 |
![]() |
TinyTheBrontosaurus · 如何在产量中扩展元组? 7 年前 |
![]() |
Eric Burel · 按顺序运行一系列sagas效果 7 年前 |
![]() |
geostocker · C#[重复]中的产量理解困难 7 年前 |