2010-02-27 12 views

Respuesta

31

El código en el constructor (es decir, el cuerpo) del objeto complementario es no exactamente igual que el código en un bloque de inicializador estático de una clase Java. En el siguiente ejemplo, creo una instancia de A, pero la inicialización no ocurre.

scala> object Test { class A; object A { println("A.init") }}   
defined module Test 

scala> new Test.A 
res3: Test.A = [email protected] 

scala> Test.A 
A.init 
res4: Test.A.type = [email protected] 

para desencadenar la construcción del objeto acompañante cuando se crea la primera instancia de la clase, se puede acceder a él desde el constructor de la clase.

scala> object Test { class A { A }; object A { println("A.init") }} 
defined module Test 

scala> new Test.A             
A.init 
res5: Test.A = [email protected] 

scala> new Test.A 
res6: Test.A = [email protected] 

En muchas circunstancias, la diferencia no importaría. Pero si estás lanzando misiles (u otros efectos secundarios), ¡te puede importar!

Cuestiones relacionadas