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!
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.
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
.
Tags und Links scala