以下for-expression
對我來說似乎很直觀。取List(1)
中的每個項目,然後映射到List("a")
,然後返回List[(Int, String)]
。for-expression to flatMap轉換
scala> val x = for {
| a <- List(1)
| b <- List("a")
| } yield (a,b)
x: List[(Int, String)] = List((1,a))
現在,將其轉換爲flatMap
,這似乎不太清楚。如果我理解正確,我需要先調用flatMap
,因爲我在初始化List(1)
,然後應用從A => List[B]
轉換的函數。
scala> List(1).flatMap(a => List("a").map(b => (a,b)))
res0: List[(Int, String)] = List((1,a))
使用flatMap後,因爲我需要從A => B
去似乎有必要使用map
。
但是,隨着項目的數量在for-expression
(比如2至3項)增加了,我怎麼知道是否使用從for-expression
轉換爲flatMap
當map
或flatMap
?
[獲取Scala的desugared部分for/comprehension表達式?](http://stackoverflow.com/questions/9891407/getting-the-desugared-part-of-a-scala-for-comprehension - 表達) – drexin