我被多层模式匹配难住了,在下面的代码中,我想匹配一个特定的情况,在几个级别上进行检查 "cfe是赋值语句,assignmentCfe.getRight是二元表达式,等等",解决方案看起来很丑陋,我希望Scala有更好的解决方法。 :)
def findAll(cfg: Cfg, consumer: Consumer[Violation]): Unit = {
val fa = new FlowAnalyzer
val states = fa.analyze(cfg)
states.foreach { case (cfe, state) => cfe match {
case assign: Assignment => assign.getRight match {
case expression: BinaryExpression => expression.getOperator match {
case Operator.Div | Operator.Rem => processDivisions()
case _ =>
}
case _ =>
}
case _ =>
}
case _ =>
}
}
如何去除结尾处的空默认情况?
另一种方法是使用嵌套条件,但IntelliJ IDEA建议我将这些条件替换为模式匹配
states.foreach { case (cfe, state) => if (cfe.isInstanceOf[Assignment]) {
val assignment = cfe.asInstanceOf[Assignment]
if (assignment.getRight.isInstanceOf[BinaryExpression]) {
val expression = assignment.getRight.asInstanceOf[BinaryExpression]
if (expression.getOperator == Operator.Div || expression.getOperator == Operator.Rem) processDivisions()
}
}}
states
的类型是什么?在很多地方似乎可以使用.filter
。 - Tyler