2017-10-19 486 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

很好的解釋! –