scala中的'< - '做什么?

时间:2013-11-20 20:03:39

标签: scala

我是该语言的新手,并试图弄清楚如何阅读其中的一些代码。这是我想要弄清楚的示例代码:

lazy val genHeap: Gen[H] = for{
    n <- arbitrary[A]
    h <- frequency((1,value(empty)),(9,genHeap))
} yield insert(n,h)

我不太明白发生了什么:

  • 返回类型为Gen
  • <-是否充当=运营商?
  • yield语句是否通过插入新元素为每次迭代构建一个堆?

1 个答案:

答案 0 :(得分:9)

您好,Coursera同学!反应式编程课程的原理并不是开始学习Scala的最简单的地方!这是一门高级Scala课程。

  

类型返回是Gen?

是的,这就是:的含义。 (Gen本身是一个对象,一个准确的随机生成器,它可以生成一系列值,每个值与其类型参数具有相同的类型 - 在本例中为H。)

  

&lt; - 作为'='运算符吗?

不完全是。

  

和yield语句..据我所知,它是通过插入一个新元素为每次迭代构建一个堆?

实际上它是递归,而不是迭代......但实质上是,是的。

for..yield表达式是一种编写一系列mapflatMapwithFilter调用的奇特方式。让我们把它变成普通的Scala代码:

lazy val genHeap: Gen[H] = arbitrary[A].flatMap(n => frequency((1,value(empty)),(9,genHeap)).map(h => insert(n,h)))

因此,H生成器(genHeap)是以生成任意A开始,然后生成任意H(空H概率为0.1,或者以{0.9}的概率再次调用genHeap本身的结果,然后将A插入H以获得新的H

顺便说一下,这些AH都是抽象类型。

是的,我会说这是非常先进的东西。如果你甚至不知道:的含义,你肯定是从错误的地方开始的。