特别是关于模式匹配和案例类。考虑以下:
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
是它是一个递归函数,尽管与我编写/处理的其他递归函数不同,基本情况排在最后是为了避免终止早期的。