在Scala中使用匿名对象实现trait

时间:2015-11-06 04:39:44

标签: scala traits

我有一个特质定义:

trait T {
  def name: String
}

我可以创建一个像这样的对象:

val o = new {
  val name: String = "anonymous"
} with T

但我无法通过以下方式创建对象:

val o = new {
  def name: String = "anonymous"
} with T

编译器说&#39 ;;'第} with T行或预期新行。唯一不同的是我在第二个实现中使用了def而不是val

我知道这个方法可以在一个匿名对象中定义,但为什么我不能在这里使用这个方法呢?

1 个答案:

答案 0 :(得分:3)

两个例子中的花括号是“早期定义”,在此解释:

In Scala, what is an "early initializer"?

所以它是初始化代码,而不是混入你的对象的东西。

这个想法是在Scala JIRA上提出的,并在“不是错误”中关闭,在这里:

https://issues.scala-lang.org/browse/SI-912