Quando si compila seguente frammento di codice:Perché Scala sfugge agli spazi nei nomi dei metodi?
class MyTest {
@org.junit.Test
def `test test`() {
}
}
Metodo test test
è stato messo in bytecode come test$u0020test
.
Perché succede e come può essere disabilitato?
Lo spazio è un identificativo valido per il nome del metodo in base alle specifiche JVM. Inoltre, non vi è alcuna menzione di tale codifica nelle specifiche del linguaggio Scala. Inoltre, altri linguaggi JVM come Spock Framework basati su Groovy e Groovy non codificano spazi.
Perché ho bisogno di questo: nomi di test JUnit e rapporti di test a misura d'uomo.
Java 1.8.0_45, Scala 2.11.6
Immagino che l'unica ragione di questo sia l'uniformità. Probabilmente non volevano casi speciali le classi di caratteri che non sono identificatori validi. Tecnicamente non vedo nemmeno una necessità. –
Sono sicuro del motivo per cui ti aspetteresti di trovarlo nelle specifiche della lingua; è una specifica * del linguaggio *, non dell'implementazione del compilatore, giusto? –