scala是否有"test-if-match"运算符?

rtp*_*tpg 7 scala pattern-matching

可能重复:
Scala:返回布尔值的简短模式匹配形式

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

x match{
   case Type(params) => doStuffWith(params)
   case _ => /* do nothing*/
}
Run Code Online (Sandbox Code Playgroud)

是否已有一些预定义的运算符来执行此操作?我想如果我能写下这样的东西会更清楚:

if( x match Type(params)) {
    doStuffWith(params)
}
Run Code Online (Sandbox Code Playgroud)

基本上避免了奇怪的情况.我还有其他情况可以验证某些东西是否与内联方式相匹配,这样可以省去额外的一对括号.

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

par*_*tic 7

你可以lift从部分功能Any,以A成从功能AnyOption[A].

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

def lifted[A]( pf: PartialFunction[Any,A] ) = pf.lift
Run Code Online (Sandbox Code Playgroud)

然后,赚钱:

val f = lifted {
  case Type(i) => doStuff(i)
}

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

scala> f(Type(4))
res16: Option[Int] = Some(8)
Run Code Online (Sandbox Code Playgroud)

doStuff仅当参数匹配时才会调用该方法.你可以有几个案例条款.