我发现自己经常写这样的东西:
a match {
case `b` => // do stuff
case _ => // do nothing
}
Run Code Online (Sandbox Code Playgroud)
是否有更短的方法来检查某个值是否与模式匹配?我的意思是,在这种情况下我可以写if (a == b) // do stuff,但如果模式更复杂怎么办?就像匹配列表或任意复杂的任何模式时一样.我希望能够写出这样的东西:
if (a matches b) // do stuff
Run Code Online (Sandbox Code Playgroud)
我对Scala比较陌生,所以请原谅,如果我错过了大的东西:)
sealed class A
class B1 extends A
class B2 extends A
Run Code Online (Sandbox Code Playgroud)
假设我们有一个类对象列表A:val l:List [A] = List(新B1,新B2,新B1,新B1)
我们想要过滤掉B1类型的元素.然后我们需要一个谓词,可以使用以下两种选择:
l.filter(_.isInstanceOf[B1])
Run Code Online (Sandbox Code Playgroud)
要么
l.filter(_ match {case b: B1 => true; case _ => false})
Run Code Online (Sandbox Code Playgroud)
就个人而言,我更喜欢第一种方法,但我经常阅读,应该match-case更频繁地使用该语句(由于我不知道的原因).
因此,问题是:使用isInstanceOf而不是使用match-case声明有缺点吗?什么时候应该使用哪种方法(这里应该使用哪种方法以及为什么)?