Scala可选模式匹配
发布时间:2020-12-16 09:51:44 所属栏目:安全 来源:网络整理
导读:我发现自己经常使用模式匹配来返回一个选项,其中无匹配情况返回None,例如 x match { case A(a) = Some(a) case B(b) = Some(b) case _ = None} 我可以想象使用它来简化这个 object MaybeMatchImplicits { implicit class MaybeMatcher[A](val underlying: A)
我发现自己经常使用模式匹配来返回一个选项,其中无匹配情况返回None,例如
x match { case A(a) => Some(a) case B(b) => Some(b) case _ => None } 我可以想象使用它来简化这个 object MaybeMatchImplicits { implicit class MaybeMatcher[A](val underlying: A) extends AnyVal { @inline def maybeMatch[B](f: PartialFunction[A,B]): Option[B] = f.lift.apply(underlying) } } 这使得 scala> import MaybeMatchImplicits._ import MaybeMatchImplicits._ scala> 5 maybeMatch { case 5 => 'good } res0: Option[Symbol] = Some('good) scala> 6 maybeMatch { case 5 => 'good } res1: Option[Symbol] = None 我想知道这种方法是否隐藏任何陷阱和/或在Scala 2.11中是否有更简单/更好/更惯用的机制. 更新:目标是处理匹配的rhs上的任意计算,这使得基于异常的解决方案不合需要. 解决方法
成语:
scala> case class A(a: Int) ; case class B(b: String) defined class A defined class B scala> def f(x: Any) = Option(x) collect { case A(a) => a ; case B(b) => b } f: (x: Any)Option[Any] scala> f(42) res0: Option[Any] = None scala> f(A(42)) res1: Option[Any] = Some(42) scala> f(B("ok")) res2: Option[Any] = Some(ok) 或者: scala> import PartialFunction.{cond => when,condOpt => whenever} import PartialFunction.{cond=>when,condOpt=>whenever} scala> def f(x: Any) = whenever(x) { case A(a) => a ; case B(b) => b } f: (x: Any)Option[Any] scala> f(42) res3: Option[Any] = None scala> f(A(42)) res4: Option[Any] = Some(42) scala> f(B("ok")) res5: Option[Any] = Some(ok) (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |