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。
我知道后者是创建“对象单例”的方法。前一个呢?谢谢
简而言之,它正在创建匿名类型的新实例
根据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)