特别是在模式匹配和case类方面。考虑以下内容:
abstract class Expr
case class Var(name: String) extends Expr
case class Number(num: Double) extends Expr
case class UnOp(operator: String, arg: Expr) extends Expr
case class BinOp(operator: String, left: Expr, right: Expr) extends Expr
object Expr {
def simplify(expr: Expr): Expr = expr match {
// Some basic simplification rules...
case UnOp("-", UnOp("-", e)) => simplify(e) // Double negation
case BinOp("+", e, Number(0)) => simplify(e) // Adding zero
case BinOp("-", e, Number(0)) => simplify(e) // Subtracting zero
case BinOp("*", e, Number(1)) => simplify(e) // Multiplying by one
case BinOp("*", e, Number(0)) => Number(0) // Multiplying by zero
case _ => expr // Default, could not simplify given above rules
}
}
对于任何样例调用,比如说 simplify(UnOp("-", UnOp("-", UnOp("-", UnOp("-", Var("x"))))))
(结果为 Var("x")
),在模式匹配表达式中备选项的顺序是否影响性能?
附带说明(与此相关): 我对 simplify
的一个显著特点印象深刻,那就是它是一个递归函数,但不同于我编写/处理过的其他递归函数,基本情况是最后出现以避免过早终止。