1
我成功地實施使用flatMap
以下咖喱功能:從flatMap轉換咖喱函數來表達
def map3(a: Option[Int], b: Option[Int], c: Option[Int])
(f: (Int, Int, Int) => Option[Int]): Option[Int] = {
a.flatMap(x => b.flatMap(y => c.flatMap(z => f(x,y,z))))
}
實施例:
scala> map3(Some(1), Some(2), Some(3))((x,y,z) => Some(x*y*z))
res0: Option[Int] = Some(6)
然而,當我試圖實現具有相同功能for expression
:
def map3ForExpr(a: Option[Int], b: Option[Int], c: Option[Int])
(f: (Int, Int, Int) => Option[Int]): Option[Int] = {
for {
x <- a
y <- b
z <- b
f(x,y,z)
}
}
...以下編譯時錯誤發生:
C:\Users\Kevin\Workspace\side-work>scalac TestForComprehensionMap3.scala TestForComprehensionMap3.scala:13: error: '<-' expected but '}' found. } ^
基於閱讀這個優秀的post,在我看來,我的map3ForExpr
相當於我map3
代碼。
請讓我知道我做錯了什麼。
謝謝,這工作。 –
@KevinMeredith更重要的是,在閱讀那篇文章後(鏈接非常好的帖子),然後看看我寫的內容,你就明白了原因。 – wheaties
不應該把那個優秀的帖子的'for-expression',第1個子彈點修改爲包含'yield'嗎?例如:'爲{ 綁定< - list out <-f(bound) } yield out' –