flatMap
の使用方法をScalaコンパイラがどのように計算して、Option
のシーケンスであるのかわかりません。"flatMap"はScalaのOptionタイプのシーケンスで動作するのはなぜですか?
私は、配列の配列にflatMap
を使用する場合:
println(Seq(Some(1), None).flatMap(a => a)) // List(1)
:それは私が
Option
秒の順序でそれを使用する場合
同じ問題が発生したすべてのネストされたシーケンスを連結します
println(Seq(Seq(1), Seq()).flatMap(a => a)) // List(1)
したがって、flatMap
はこの場合はOption
をコレクションとして扱います。問題はなぜこれが機能するのか?それはGenTraversableOnce
のインスタンスを返しますが、Option
はGenTraversableOnce
を継承していない機能を期待していることの意味
def flatMap[B, That](f: A => GenTraversableOnce[B])(implicit bf: CanBuildFrom[Repr, B, That]): That
:flatMap
は、次のように定義されています。それはProduct
とSerializable
を継承し、Product
はEquals
を継承します。
この場合、ScalaコンパイラはOption
のシーケンスでflatMap
をどのように使用できますか?
を、これも事実 'オプション[A]'から生じるが、* *モナドでありますオプションフラットマップの汎用シグネチャのためにぼやけてしまいます。 'option [A]'の 'flatMap'(そうでなければ' bind'という名前)は本当に 'def flatMap(f:A => Option [B]):オプション[B]'でなければなりません。スカラズやネコなどの図書館。 –