【问题标题】:Implements trait with an anonymous object in Scala在 Scala 中使用匿名对象实现 trait
【发布时间】:2015-11-06 12:57:08
【问题描述】:

我有一个特质定义:

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

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

【问题讨论】:

  • this
  • 我得到的编译器错误是“错误:在早期对象初始化部分只允许具体的字段定义”

标签: scala traits


【解决方案1】:

你的两个例子中的大括号是“早期定义”,在这里解释:

In Scala, what is an "early initializer"?

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

这个想法是在 Scala JIRA 上提出的,并在此处以“不是错误”的形式关闭:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-06-23
    相关资源
    最近更新 更多