在下面的课程中:
package patternmatching
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
}我将主类定义为:
package patternmatching
import patternmatching.Expr.Var
object PatternMain {
def main(args:Array[String]) {
val v = Var("x")
}
}但是,在PatternMain中,我在import patternmatching.Expr.Var行接收到一个编译时错误:
如何对case类Var正确地调用val v = Var("x")?我没有正确地导入它吗?
发布于 2012-10-17 22:14:42
删除abstract关键字并将class Expr转换为object Expr。就您的代码而言,我认为没有理由不进行这些更改。
但是,如果您确实想让Expr保持一个抽象类,则必须扩展和实例化它:
def main(args:Array[String]) {
val expr = new Expr {} // extending the class - this creates a anonymous class
val v = expr.Var("x")
// alternatively, since now we do have a object to import
import expr._
val v2 = Var("x")
// even another approach, now using a named class
class MyExpr extends Expr
val myexpr = new MyExpr
val v3 = myexpr.Var("x")
}解释:
https://stackoverflow.com/questions/12943995
复制相似问题