, 슬프게도, 방법이없는 것은 바로이 작업을 수행하는 것으로 보이지 않는다. 나는 하나를 추가 : 당신은이 map
/getOrElse
대신 패턴 매칭으로 사용될 수 있음을 정의 어떻게에서 볼 수있는 약간 더 멋진 (내 생각에) 사용
op.fold{ println("Empty!") }{ x => doStuffWith(x) }
있다
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)
합니다.
또는 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