Где я могу найти список всех специальных черт в Scala? - PullRequest
9 голосов
/ 31 августа 2011

Special означает, что они предоставляют вам функциональность, которую невозможно получить иначе, поэтому они обрабатываются компилятором особым образом. Примеры: 'DelayedInit' - преобразовать весь код инициализации в основные методы, 'Dynamic' - прокси всех методов и т. Д.

Ответы [ 2 ]

12 голосов
/ 31 августа 2011

В настоящее время единственными особыми чертами, которые мне известны, являются DelayedInit и Dynamic.

Все, что унаследовано от этих признаков, также получает специальную обработку от компилятора, как с App, который подклассы DelayedInit.

Стоит отметить, что любая черта потенциально может использоваться в качестве маркера некоторыми библиотеками, фреймворками или плагином компилятора, чтобы «дать вам функциональность, которую невозможно получить иначе». Эти две черты являются единственными чертами, которые специально распознаются компилятором по умолчанию .

Помимо признаков маркеров, есть некоторые аннотации, которые обрабатываются специально, scala.annotation и scala.reflect - хорошие места для их поиска, также есть аннотация @specialized в пакете scala и несколько в компиляторе. плагины (такие как продолжение с разделителями).

10 голосов
/ 31 августа 2011

Существует также scala.Singleton.

Это final trait, и его нельзя использовать нормально при написании кода, но каждый, кто использует какой-то синглтон, такой как object Foo, уже использовал его косвенно.

Singleton используется компилятором для расширения синглтона, поэтому:

scala> object Foo
defined module Foo

scala> Foo.isInstanceOf[Singleton]
res0: Boolean = true
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...