2011-08-31 99 views
9

特殊意味着它們給你的功能是不可能的,所以它們通過編譯器以特殊方式處理。 例子:「DelayedInit」 - 將所有初始化代碼主要方法,「動態」 - 代理的所有方法等我在哪裏可以找到Scala中所有特殊特徵的列表?

+0

A小調點:DelayedInit是「神奇」性狀,應用程序只使用它。 –

+0

由於性能方面的原因,對於JVM上構造函數的優化,「App」只是「神奇的」。通過給它一個'main(args:Array [String])'方法,你可以很容易地創建自己的可執行特徵:例如參見(不推薦)的'Application'特徵。 –

回答

12

目前,唯一特殊的特徵我知道是DelayedInitDynamic的。

任何繼承這些特徵的東西也會得到編譯器的特殊處理,如App,它的子類DelayedInit

值得注意的是,任何特徵可能被某些庫,框架或編譯器插件用作標記,以「爲您提供無法獲取的功能」。雖然這兩個是唯一被默認編譯器識別的特徵。

除了標記性狀,也有一些批註得到特殊對待,scala.annotationscala.reflect的好地方找到這些,也有在@specialized標註在scala包和編譯器插件數(如分隔的延續) 。

10

還有scala.Singleton

這是一個final trait並且在編寫代碼時不能正常使用,但是使用某個單例如object Foo的每個人都已經間接使用它。

Singleton使用由編譯器來擴展一個單,因此:

scala> object Foo 
defined module Foo 

scala> Foo.isInstanceOf[Singleton] 
res0: Boolean = true 
相關問題