2011-08-31 14 views
9

Especial significa que le brindan una funcionalidad que es imposible obtener de otra manera, por lo que tratan de forma especial al compilador. Ejemplos: 'DelayedInit' - convertir todo el código de inicialización a métodos principales, 'dinámicos' - apoderado de todos los métodos, etc.¿Dónde puedo encontrar la lista de todos los rasgos especiales en Scala?

+0

un punto menor: DelayedInit es el rasgo "mágica", la aplicación solo lo utiliza. –

+0

'App' es solo" mágico "por razones de rendimiento con respecto a la optimización de constructores en la JVM. Puedes crear fácilmente tu propio rasgo ejecutable dándole un método 'main (args: Array [String])': mira por ejemplo el rasgo '' Application' (obsoleto). –

Respuesta

12

En la actualidad, los únicos rasgos especiales yo sepa son DelayedInit y Dynamic.

Cualquier cosa que herede de estos rasgos también recibe un trato especial por parte del compilador, como con App, cuyas subclases DelayedInit.

Vale la pena señalar que cualquier rasgo de podría ser utilizado como marcador por alguna biblioteca, marco o complemento del compilador para "darle una funcionalidad que es imposible obtener de otra manera". Estos dos son los únicos rasgos que son especialmente reconocidos por el compilador predeterminado embargo.

Así como los rasgos marcadores, hay algunas anotaciones que reciben tratamiento especial, el scala.annotation y scala.reflect son buenos lugares para encontrar estos, también existe la @specialized anotación en el paquete scala y varios en los plugins del compilador (como continuaciones delimitados) .

10

También hay scala.Singleton.

Es final trait y no se puede usar normalmente mientras se escribe el código, pero todos los que usan algún singleton como object Foo ya lo han usado de forma indirecta.

Singleton es utilizado por el compilador para extender un producto único, por lo tanto:

scala> object Foo 
defined module Foo 

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