[英]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.