9
scala> List(List(1), List(2), List(3), List(4))
res18: List[List[Int]] = List(List(1), List(2), List(3), List(4))

scala> res18.flatten
res19: List[Int] = List(1, 2, 3, 4)

scala> res18.flatMap(identity)
res20: List[Int] = List(1, 2, 3, 4)

これら2つの機能に違いはありますか?どちらか一方を使用するのが適切なのはいつですか? トレードオフはありますか?

4

3 に答える 3

3

概念的には、違いはありません。実際にflattenは、より効率的で、より明確な意図を伝えます。

identity通常、直接使用することはありません。パラメータとして渡されたり、デフォルトとして設定されたりするような状況では、より多くのものがあります。コンパイラがそれを最適化することは可能ですが、すべての要素に対して余分な関数呼び出しを行う危険があります。

( 以外の関数を使用flatMapして) を実行する必要があり、その直後に.mapidentityflatten

于 2014-11-18T22:36:48.283 に答える