ScalaのOption
は、まさにこれを行うための方法を逃し、悲しいこと、です。私は1つを追加します(私の見解では)少しよりよいがあり
class OptionWrapper[A](o: Option[A]) {
def fold[Z](default: => Z)(action: A => Z) = o.map(action).getOrElse(default)
}
implicit def option_has_utility[A](o: Option[A]) = new OptionWrapper(o)
使い方
op.fold{ println("Empty!") }{ x => doStuffWith(x) }
あなたはmap
/getOrElse
ではなく、パターンマッチングを使用することができることが規定されていますどのように見ることができます。
また、Either
はすでにfold
メソッドを持っています。だから、
op.toRight(()).fold{ _ => println("Empty!") }{ x => doStuffWith(x) }
をすることができますが、これは、あなたが左の価値を提供する(ここでは()
、すなわち単位)と、その上の関数を定義だけではなく、あなたが起こるしたいものを伝えるために持っていることを考えると少し不器用ですNone
。
パターンマッチは、特にコードの長いブロックの場合にも悪くありません。短いものについては、試合のオーバーヘッドがポイントの途中で始まります。たとえば:
op.fold{ printError }{ saveUserInput }
は
op match {
case Some(x) => saveUserInput(x)
case None => printError
}
よりもはるかに少ない構文のオーバーヘッドを持っており、あなたはそれを期待したらそれゆえ、理解するずっと簡単です。
[Tony Morris 'scala.Option Cheat Sheet](http://blog.tmorris.net/scalaoption-cheat-sheet/)をご覧ください。 –
リンクがhttp://blog.tmorrisに変更されました.net/posts/scalaoption-cheat-sheet/index.html – giampaolo