Scala 中的“new {}”是什么意思?

Jer*_* Li 1 scala anonymous-types

我正在研究.sbt扩展文件参考文档。我感到困惑的代码是:

lazy val version = new {
    val finatra = "2.1.2"
}
Run Code Online (Sandbox Code Playgroud)

我知道 valfinatra可以通过 访问version.finatra,但它似乎是“对象单例”。像这样:

object version {
    val finatra = "2.1.2"
}
Run Code Online (Sandbox Code Playgroud)

在这种情况下,我还可以finatra通过访问 val version.finatra
我知道后者是创建“对象单例”的方法。前一个呢?谢谢

ymo*_*nad 5

简而言之,它正在创建匿名类型的新实例

根据Scala 语言规范


考虑以下结构实例创建表达式:

new { def getName() = "aaron" }
Run Code Online (Sandbox Code Playgroud)

这是通用实例创建表达式的简写

new AnyRef{ def getName() = "aaron" }
Run Code Online (Sandbox Code Playgroud)

后者又是块的简写

{ class anon$X extends AnyRef{ def getName() = "aaron" }; new anon$X }
Run Code Online (Sandbox Code Playgroud)