In Scala scheint die Initialisierung statischer Werte nicht vor dem Aufruf der Hauptmethode zu erfolgen

8

Meine Scala-Version:

%Vor%

Dieser Code wurde in einer Datei namens Static.scala angegeben:

%Vor%

Wenn ich renne:

%Vor%

Ich sehe:

%Vor%

anstelle von:

%Vor%

Ich dachte, dass x eine statische war, weil sie in einem Objekt definiert wurde und vor dem Aufruf der Hauptmethode initialisiert wurde.

Was mache ich falsch? Danke!

    
Tim Stewart 08.07.2011, 17:56
quelle

3 Antworten

11

Dies geschieht, weil Sie das App-Merkmal verwendet haben. Das App-Merkmal verwendet das DelayedInit-Feature, das die Ausführung des Klassenhauptteils (einschließlich Feldinitialisierung) ändert. Das App-Merkmal enthält eine Hauptmethode, die den Klassenkörper ausführt, nachdem das Argumentfeld an die Argumente des Programms gebunden wurde. Da Sie main überschrieben haben, findet diese Initialisierung nicht statt. Sie sollten keine Hauptmethode angeben, wenn Sie das App-Merkmal verwenden. Sie sollten den Anwendungscode entweder direkt in den Klassenhauptteil einfügen oder nicht vom App-Merkmal erben.

    
Geoff Reedy 08.07.2011, 19:14
quelle
1

Versuchen Sie

%Vor%

Das sollte Ihnen die Ergebnisse geben, die Sie erwarten.

    
Janx 08.07.2011 18:19
quelle
1

Sie unterstützen nicht die Methode main für ein Objekt, das App erweitert. Wenn Sie es überschreiben, sollten Sie besser verstehen, wie genau DelayedInit funktioniert. Insbesondere Objekte, die App nicht erweitern haben eine statische Initialisierung - das ist der ganze Sinn von App .

    
Daniel C. Sobral 08.07.2011 22:32
quelle

Tags und Links