Другие ответы дали композицию map
+ getOrElse
. Просто для записи, вы можете «добавить» функцию maybe
к Option
следующим образом:
implicit def optionWithMaybe[A](opt: Option[A]) = new {
def maybe[B](f: A=>B)(g: =>B) = opt map f getOrElse g
}
Стоит отметить, что синтаксис функций высшего порядка в Scala обычно лучше, когда параметр функции стоит последним. Таким образом, лучший способ организовать maybe
будет выглядеть следующим образом:
def maybe[B](g: =>B)(f: A=>B) = opt map f getOrElse g
Это можно использовать следующим образом:
val opt: Option[String] = ...
opt.maybe("") { _.toUpperCase }