Scala 什么是'<-';你在斯卡拉做什么?

Scala 什么是'<-';你在斯卡拉做什么?,scala,Scala,我对这门语言还不熟悉,正试图弄明白如何阅读其中的一些代码。下面是我试图找出的示例代码: lazy val genHeap: Gen[H] = for{ n <- arbitrary[A] h <- frequency((1,value(empty)),(9,genHeap)) } yield insert(n,h) lazy val genHeap:Gen[H]=for{ 大家好,Coursera的同学们!反应式编程原理课程并不是学习Scala最容易的地方!它是一门

我对这门语言还不熟悉,正试图弄明白如何阅读其中的一些代码。下面是我试图找出的示例代码:

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

大家好,Coursera的同学们!反应式编程原理课程并不是学习Scala最容易的地方!它是一门高级Scala课程

返回的类型是Gen

是的,这就是
的意思。(确切地说,
Gen
本身是一个对象,是一个随机生成器,可以生成一系列值,每个值的类型与其类型参数相同-在本例中为
H


您好。您可能想从这里开始:实际上,即使您已经学习了第一门课程,您也可能在本练习中完全迷失……这里的任意[A]是否类似于流?函数是否递归调用genHeap,直到它到达一个空值,然后从那里构建堆?@Allen Wang
arbitral[A]
是一个命令语句,它使用作用域中的隐式
Gen[a]
生成一个类型为
a
的随机值。从概念上讲,你可以认为它就像从无限个随机值流中弹出下一个随机值一样。是的,
genHeap
是一个“调用自身”的递归值在这种情况下,懒惰来自这样一个事实,即它被定义为一个
lazy val
lazy val genHeap: Gen[H] = arbitrary[A].flatMap(n => frequency((1,value(empty)),(9,genHeap)).map(h => insert(n,h)))