我的函数找不到类,而是在同一个Object中找到一个case类

时间:2016-01-14 13:28:29

标签: scala

如果我将以下代码从class更改为case class,那么我就可以了。我不知道为什么

object Test {
  trait T {
    var l = {
      println("l in T initialized")
      "OK"
    }
  }

  class MyClass(x: Int) extends T

  def testTrait() = {
    val t = MyClass(1)

  }

}

1 个答案:

答案 0 :(得分:4)

如果它不是案例类,则需要将其实例化为

val t = new MyClass(1)

即。称它为构造函数。

的原因在于它是一个案例类时,它声明它是一个案例类隐式定义了类的伴随中的new方法宾语;即你免费获得这个:

apply

object MyClass { def apply(x: Int): MyClass = { new MyClass(x) } } 方法是scala中的语法糖,允许使用此简写符号apply

您还可以免费获得其他内容,例如MyClass(1)方法,实现结构相等的unapply方法和equals方法。点击此处:http://docs.scala-lang.org/tutorials/tour/case-classes.html