在哪里可以找到Scala中所有特殊特征的列表?

时间:2011-08-31 07:18:53

标签: scala

特殊意味着它们为您提供了无法获得的功能,因此它们以特殊方式由编译器处理。 示例:'DelayedInit' - 将所有init代码转换为main方法,'Dynamic' - 代理所有方法等

2 个答案:

答案 0 :(得分:12)

目前,我所知道的唯一特殊特征是DelayedInitDynamic

继承自这些特征的任何内容也会得到编译器的特殊处理,就像App一样,它是DelayedInit的子类。

值得注意的是,任何特征都可能被某些库,框架或编译器插件用作标记,以“为您提供无法获得的功能”。这两个是默认编译器特别识别的唯一特征。

除了标记特征之外,还有一些注释可以得到特殊处理,scala.annotationscala.reflect是查找这些注释的好地方,@specialized注释中也有scala注释1}}包和几个在编译器插件中(例如分隔的延续)。

答案 1 :(得分:10)

还有scala.Singleton

这是final trait,在编写代码时无法正常使用,但是使用像object Foo这样的单例的每个人都已间接使用它。

编译器使用

Singleton来扩展单例,因此:

scala> object Foo
defined module Foo

scala> Foo.isInstanceOf[Singleton]
res0: Boolean = true