【发布时间】:2013-06-20 06:42:20
【问题描述】:
我找不到这个简单问题的答案,可能是我用了错误的关键字搜索。
要创建 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
}
【问题讨论】:
-
案例类和继承就像油和肥皂;它们混合不好。将它们组合起来需要您自担风险。
标签: scala