对于scala中的块具有收益率

时间:2018-05-23 02:28:29

标签: scala

Odersky书中记录了这一点:

def bestBuyerPrice: Option[Price] = bids.headOption

for {
   price1 <- bestBuyerPrice
   price2 <- bestAskerPrice
} yield (price1.price + price2.price) / 2

这个语法叫什么?这记录在哪里?

什么是发电机?不是最好的购买者价格NoneSome

2 个答案:

答案 0 :(得分:2)

这里有两件事情。

首先,正如已经观察到的那样,使用for只是在集合上调用mapflatMap的简写。需要注意的一点是,for返回的集合类型是第一行<-行中集合的类型。

其次,您可以将Option值视为具有01元素的集合。如果选项为map,则Option上的None将会返回None,如果选项为Some(y),则会返回Some(x)。在flatMap集合上调用Option将从集合中删除所有None值,并提取所有Some选项的值。

因此,将这些放在一起,您的代码会返回Option,因为bestBuyerPrice是一个选项。如果bestBuyerPricebestAskerPriceNone,则结果为None,因为这是map / flatMap返回的内容。如果它们都是Some(x),则结果为Some(y),其中yyield的结果。

答案 1 :(得分:1)

我没有这本书的最新版本,但是寻找&#34;对于理解&#34;,基本上是用于链接flatMaps和map的语法糖。

请参阅https://docs.scala-lang.org/tour/for-comprehensions.html