我找不到这个简单问题的答案,也许我使用了错误的关键字进行搜索。
要创建 AST,我需要 Number、Add、Sub、Mul、Div 等节点。由于许多数学运算具有相同的结构,我如何在相同的模式匹配情况下处理它们?例如,据说下面的行在语法上是不正确的:
object AST {
sealed abstract class Expr
case class MathOp(e1: Expr, e2: Expr) extends Expr
case class Number extends Expr
case class Add(e1: Expr, e2: Expr) extends MathOp(e1, e2)
case class Sub(e1: Expr, e2: Expr) extends MathOp(e1, e2)
}
目的是能够做到:
expr match {
case MathOp(e1: Expr, e2: Expr) => //do something that would be done to Add, Sub, Mul, Div
case Number => //do another thing
}