2017-10-19 81 views
1

我在研究有关.sbt扩展名文件的参考文档。什么码我感到困惑的是:Scala中“new {}”的含义是什么?

lazy val version = new { 
    val finatra = "2.1.2" 
} 

我知道VAL finatra可以通过version.finatra访问,但它似乎是“对象单身。”这些是这样的:

object version { 
    val finatra = "2.1.2" 
} 

在这种情况下,我也可以通过version.finatra访问VAL finatra
我知道后面的一种是创建“对象单例”的方法。 前者如何?由于

回答

3

总之,它是创造的Anonymous Type

新实例按照Scala Language Spec


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

new { def getName() = "aaron" } 

这是一个速记为一般情况创建表达式

new AnyRef{ def getName() = "aaron" } 

后者又一个简写块

{ class anon$X extends AnyRef{ def getName() = "aaron" }; new anon$X } 

+0

很好的解释! –