[英]What does the '<-' do in scala?
我是该语言的新手,并试图弄清楚如何阅读其中的一些代码。 这是我想要弄清楚的示例代码:
lazy val genHeap: Gen[H] = for{
n <- arbitrary[A]
h <- frequency((1,value(empty)),(9,genHeap))
} yield insert(n,h)
我不太明白发生了什么:
Gen
? <-
是否作为=
运算符? 你好,Coursera同学! 反应式编程课程的原理并不是开始学习Scala的最简单的地方! 这是一门先进的Scala课程。
类型返回是Gen?
是的,这就是:
意思。 ( Gen
本身是一个对象,一个精确的随机生成器,它可以生成一系列值,每个值与其类型参数具有相同的类型 - 在本例中为H
)
< - 是否作为'='运算符?
不完全是。
和yield语句..据我所知,它是通过插入一个新元素与每次迭代构建一个堆?
实际上它是递归,而不是迭代......但实质上,是的。
for..yield表达式是编写一系列map
, flatMap
和withFilter
调用的一种奇特方式。 让我们把它变成普通的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
(概率为0.1的空H
,或者以0.9的概率再次调用genHeap
本身的结果),然后将A
插入到H
得到一个新的H
顺便说一句,这些A
和H
都是抽象类型。
是的,我会说这是非常先进的东西 。 如果你甚至不知道:
什么意思,你肯定是在错误的地方开始的。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.