我有一个特质定义:
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
。
我知道这个方法可以在一个匿名对象中定义,但为什么我不能在这里使用这个方法呢?
答案 0 :(得分:3)
两个例子中的花括号是“早期定义”,在此解释:
In Scala, what is an "early initializer"?
所以它是初始化代码,而不是混入你的对象的东西。
这个想法是在Scala JIRA上提出的,并在“不是错误”中关闭,在这里: