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似乎有很多隐藏的功能,我想知道是否有人有一个简单的解决方案.
你可以lift从部分功能Any,以A成从功能Any到Option[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仅当参数匹配时才会调用该方法.你可以有几个案例条款.