这个问题在这里已经有了答案:




8年前关闭。






在我的 Scala 代码中,我发现自己经常编写如下内容:

x match{
   case Type(params) => doStuffWith(params)
   case _ => /* do nothing*/
}

是否已经有一些预定义的运算符来执行此操作?我想如果我能写这样的东西会更清楚:
if( x match Type(params)) {
    doStuffWith(params)
}

本质上避免了怪异的情况。我还遇到过其他情况,如果能够以内联方式验证某些内容是否与模式匹配,可以为我节省一对额外的大括号。

我知道这种事情可能只会在编写更多迭代代码时更有用,但是 Scala 似乎有很多隐藏的功能,我想知道是否有人对此有一个简单的解决方案。

最佳答案

您可以将 lift 的部分函数从 AnyA 转换为从 AnyOption[A] 的函数。

为了使语法更好,首先定义一个辅助函数:

def lifted[A]( pf: PartialFunction[Any,A] ) = pf.lift

然后,赚取利润:
val f = lifted {
  case Type(i) => doStuff(i)
}

scala> f(2)
res15: Option[Int] = None

scala> f(Type(4))
res16: Option[Int] = Some(8)

只有在参数匹配时才会调用 doStuff 方法。你可以有几个 case 子句。

10-08 16:09