无法实例化构造函数

时间:2018-01-22 16:59:04

标签: scala pattern-matching

我有以下简单的代码:

package week_4

object Pattern_matching {
  trait Expr
  case class Number(n: Int) extends Expr {}
  case class Sum(e1: Expr, e2: Expr) extends Expr {}

  def eval: Int = this match {
    case Number(n) => n
    case Sum(e1, e2) => e1.eval + e2.eval
  }
}

我得到的错误在第9行和第10行。在数据类型方面我怎么理解?

(错误消息是:构造函数无法实例化为预期类型;找到:week_4.Pattern_matching.Sum required:week_4.Pattern_matching.type)

1 个答案:

答案 0 :(得分:1)

看看this。它只能是Pattern_matching类型,因此它不能是任何一个案例类。 Expr特征没有eval成员。

我猜你想要这样的东西。

object Pattern_matching {
  trait Expr {
    def eval: Int = this match {
      case Number(n) => n
      case Sum(e1, e2) => e1.eval + e2.eval
    }
  }

  case class Number(n: Int) extends Expr
  case class Sum(e1: Expr, e2: Expr) extends Expr
}