Odersky书中记录了这一点:
def bestBuyerPrice: Option[Price] = bids.headOption
for {
price1 <- bestBuyerPrice
price2 <- bestAskerPrice
} yield (price1.price + price2.price) / 2
这个语法叫什么?这记录在哪里?
什么是发电机?不是最好的购买者价格None
或Some
?
答案 0 :(得分:2)
这里有两件事情。
首先,正如已经观察到的那样,使用for
只是在集合上调用map
和flatMap
的简写。需要注意的一点是,for
返回的集合类型是第一行<-
行中集合的类型。
其次,您可以将Option
值视为具有0
或1
元素的集合。如果选项为map
,则Option
上的None
将会返回None
,如果选项为Some(y)
,则会返回Some(x)
。在flatMap
集合上调用Option
将从集合中删除所有None
值,并提取所有Some
选项的值。
因此,将这些放在一起,您的代码会返回Option
,因为bestBuyerPrice
是一个选项。如果bestBuyerPrice
或bestAskerPrice
为None
,则结果为None
,因为这是map
/ flatMap
返回的内容。如果它们都是Some(x)
,则结果为Some(y)
,其中y
是yield
的结果。
答案 1 :(得分:1)
我没有这本书的最新版本,但是寻找&#34;对于理解&#34;,基本上是用于链接flatMaps和map的语法糖。