2011-08-17 14 views
7

estoy leyendo la fuente de un project, y se encontró ese código no:¿Por qué no se establece el valor directamente

private var _responded: Boolean = _ 
{ 
    _responded = false 
} 

No entiendo por qué lo escribió así, no es lo mismo como:

private var _responded = false 

¿Cuál es la diferencia entre ellos?

+2

Eso es desconcertante. Me pregunto si tiene algo que ver con la linealización de múltiples rasgos heredados. –

+1

No hay diferencia que yo sepa. Tal vez sería una buena idea preguntarle al autor? –

+0

Re: herencia múltiple - rayar eso, los vars no pueden ser anulados. –

Respuesta

7

Soy el autor de ese código.

escribir así:

private var _responded = false 

causas de esta advertencia en la compilación (con versiones anteriores de Scala, parece ningún problema con Scala 2.9):

the initialization is no longer be executed before the superclass is called 

puede google acerca de que la alerta de encontrar más información.

6

Voy a arriesgarme a adivinar aquí, pero se parece mucho al código producido por la conversión automática de intellia a Java.

Este convertidor intenta mantener la semántica del Java original lo más cerca posible, y por lo tanto tiende a producir código muy no idiomático, así como muchos ámbitos anidados y variables mutables.

+0

¿Sabe usted cómo la semántica difiere entre los dos (var inicializado en línea, o en un bloque separado)? –

+0

Para la mayoría de los propósitos, son lo mismo. Sin embargo, en escenarios venideros, existe un riesgo (ciertamente pequeño) de que otro hilo lea el valor no inicializado cuando la declaración y la asignación son declaraciones discretas. –

Cuestiones relacionadas