Pregunta ¿Por qué no hay una advertencia de código muerto después de declaración de devolución?


¿Alguien puede explicar por qué el método a continuación se compila sin ningún mensaje de error? Esperaba una advertencia de código muerto o algo así. ¿Hay alguna razón por la cual compila?

def somethingAfterReturn(): Int = {
   println("That is ok..");
   return 1
   println("WTF is going on here?");
   3
}

5
2017-10-21 17:33


origen


Respuestas:


El compilador lo permite porque es sintácticamente válido.


1
2017-10-21 17:35



Primero, intente esto:

$ scala -e 'def somethingAfterReturn(): Int = { println("That is ok.."); return 1; println("WTF is going on here?"); 3 }'

sin errores, ¿verdad?

Entonces, intente esto:

$ scala -Ywarn-dead-code -e 'def somethingAfterReturn(): Int = { println("That is ok.."); return 1; println("WTF is going on here?"); 3 }'

Por defecto, Scala ignora código inalcanzable.


9
2017-10-21 17:42



El compilador ve que el código después de la devolución nunca se ejecutará, por lo que lo ignora ... así que creo


0
2017-10-21 17:36