这个问题在这里已经有了答案:
8年前关闭。
在我的 Scala 代码中,我发现自己经常编写如下内容:
x match{
case Type(params) => doStuffWith(params)
case _ => /* do nothing*/
}
是否已经有一些预定义的运算符来执行此操作?我想如果我能写这样的东西会更清楚:
if( x match Type(params)) {
doStuffWith(params)
}
本质上避免了怪异的情况。我还遇到过其他情况,如果能够以内联方式验证某些内容是否与模式匹配,可以为我节省一对额外的大括号。
我知道这种事情可能只会在编写更多迭代代码时更有用,但是 Scala 似乎有很多隐藏的功能,我想知道是否有人对此有一个简单的解决方案。
最佳答案
您可以将 lift
的部分函数从 Any
到 A
转换为从 Any
到 Option[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 子句。