私はここで私を推薦したブログ投稿を読みました。今、私はそれらの方法のいくつかが何に役立つのだろうかと思います。(ではなく)との使用例を示していただけますか?forall
foreach
toList
Option
7032 次
3 に答える
27
map
Option
:おそらくすでにsについて知っているように、値を「内部」に変換できますList
。この操作はOption
ファンクターになります(同僚を怖がらせたい場合は「エンドファンクター」と言うことができます)flatMap
:Option
は実際にはモナドであり、flatMap
1つになります(単一の値のコンストラクターのようなものと一緒に)。このメソッドは、値をに変換する関数がある場合に使用できますが、持っているOption
値はすでにに「ラップ」されているOption
ためflatMap
、関数を適用する前にラップを解除する手間が省けます。たとえば、があればOption[Map[K,V]]
、と書くことができますmapOption.flatMap(_.get(key))
。map
ここで単純なものを使用するとOption[Option[V]]
、が得られますが、これを使用すると。flatMap
が得られますOption[V]
。この方法は、非常に柔軟な方法で関数を連鎖させることができるため、想像以上にクールです(これが、Haskellがモナドを愛する理由の1つです)。flatten
Option[Option[T]]
:タイプの値がある場合は、flatten
それを。に変換しOption[T]
ます。と同じflatMap(identity(_))
です。orElse
:sでラップされた複数の選択肢がOption
あり、実際に値を保持する最初の選択肢が必要な場合は、これらの選択肢を次のように連鎖させることができますorElse
。steakOption.orElse(hamburgerOption).orElse(saladOption)
getOrElse
:から値を取得しますOption
が、空の場合はデフォルト値を指定します。例:nameOption.getOrElse("unknown")
。foreach
:存在する場合は、内部の値を使用して何かを実行します。isDefined
、isEmpty
:これOption
が値を保持するかどうかを判別します。forall
、exists
:指定された述語が値に当てはまるかどうかをテストします。forall
は、と同じoption.map(test(_)).getOrElse(true)
ですが、デフォルトexists
と同じfalse
です。toList
:驚いたことに、それはに変換しOption
ますList
。
于 2011-07-26T21:50:30.743 に答える
11
Optionのメソッドの多くは、すべて非常に小さな関数であり、多くの労力を惜しまないため、有用性ではなく、(コレクションを使用した)均一性のために存在する可能性がありますが、目的を果たし、その意味は次のとおりです。コレクションフレームワークに慣れたら、クリアします(よく言われるように、Optionは複数の要素を持つことができないリストのようなものです)。
forallは、オプション内の値のプロパティをチェックします。値がない場合は、チェックに合格します。たとえば、レンタカーで許可されている場合はadditionalDriver: Option[Person]
、次のことができます。
additionalDriver.forall(_.hasDrivingLicense)
複数の追加ドライバーが許可され、リストがある場合とまったく同じことです。
toListは便利な変換かもしれません。オプションがあり、List [Option [T]]であり、すべてのオプションの値がSomeであるList[T]を取得するとします。できるよ
for(option <- options; value in option.toList) yield value
(またはそれ以上options.flatMap(_.toList)
)
于 2011-07-26T16:38:12.467 に答える