在 Scala 中使用匿名对象实现特征
Implements trait with an anonymous object in Scala
我有一个特征定义:
trait T {
def name: String
}
我可以创建如下对象:
val o = new {
val name: String = "anonymous"
} with T
但是我无法通过以下方式创建对象:
val o = new {
def name: String = "anonymous"
} with T
编译器说 ';'或行 } with T
中的换行符 。唯一不同的是我在第二个实现中使用 def
而不是 val
。
我知道可以在匿名对象中定义方法,但为什么我不能在这里这样使用?
你的两个例子中的花括号是"early definitions",这里解释一下:
In Scala, what is an "early initializer"?
所以它是初始化代码,而不是混入您的对象的代码。
这个想法是在 Scala JIRA 上提出的,并以 "not a bug" 结束,这里:
我有一个特征定义:
trait T {
def name: String
}
我可以创建如下对象:
val o = new {
val name: String = "anonymous"
} with T
但是我无法通过以下方式创建对象:
val o = new {
def name: String = "anonymous"
} with T
编译器说 ';'或行 } with T
中的换行符 。唯一不同的是我在第二个实现中使用 def
而不是 val
。
我知道可以在匿名对象中定义方法,但为什么我不能在这里这样使用?
你的两个例子中的花括号是"early definitions",这里解释一下:
In Scala, what is an "early initializer"?
所以它是初始化代码,而不是混入您的对象的代码。
这个想法是在 Scala JIRA 上提出的,并以 "not a bug" 结束,这里: