Warum läuft die Hauptfunktion nicht in der REPL?

7

Dies ist ein einfaches Programm. Ich habe erwartet, dass main im interpretierten Modus läuft. Aber die Anwesenheit eines anderen Gegenstandes führte dazu, dass es nichts tat. Wenn% code_de nicht vorhanden wäre, hätte das Programm ausgeführt.

Warum wird QSort nicht aufgerufen, wenn ich dies in der REPL ausführe?

%Vor%

BEARBEITEN: Sorry für Verwirrung, ich führe das Skript als main .

    
aitchnyu 26.03.2012, 18:04
quelle

2 Antworten

14

Was passiert

?

Wenn der Parameter für scala eine vorhandene .scala-Datei ist, wird er im Arbeitsspeicher kompiliert und ausgeführt. Wenn es ein einzelnes Objekt der obersten Ebene gibt, wird eine Hauptmethode gesucht und, falls sie gefunden wird, ausgeführt. Wenn dies nicht der Fall ist, werden die Anweisungen auf oberster Ebene in eine synthetische main-Methode eingebettet, die stattdessen ausgeführt wird.

Aus diesem Grund ermöglicht das Entfernen der QSort-Objekte auf oberster Ebene die Ausführung Ihrer Hauptmethode.

Wenn Sie dies zu einem vollständigen Programm erweitern möchten, rate ich Ihnen, die kompilierten .class-Dateien zu kompilieren und auszuführen (verwenden Sie ein Build-Tool wie sbt ):

%Vor%

Wenn Sie ein einzelnes Dateiskript schreiben, löschen Sie einfach die main-Methode (und ihr Objekt) und schreiben Sie die Anweisungen, die im äußeren Bereich ausgeführt werden sollen, wie:

%Vor%

und führen Sie mit: scala qsort.scala

Ein kleiner Kontext

Der Befehl scala ist für die Ausführung von Scala-Skripten (Einzelprogramme) und komplexen Java-ähnlichen Programmen (mit einem Hauptobjekt und einer Menge Klassen im Klassenpfad) gedacht.

Von man scala :

%Vor%

Wenn nicht ausdrücklich angegeben, wird der howtorun -Modus aus den Argumenten ermittelt, die an das Skript übergeben werden.

Wenn ein vollständig qualifizierter Name eines Objekts angegeben wird, erwartet scala -howtorun:object und erwartet ein kompiliertes Objekt mit diesem Namen auf dem Pfad.

Andernfalls wird, wenn der Parameter scala eine vorhandene .scala-Datei ist, -howtorun:script geschätzt, und der Einstiegspunkt wird wie oben beschrieben ausgewählt.

    
Utaal 26.03.2012, 22:22
quelle
7

Jede Methode eines Objektmoduls kann in REPL ausgeführt werden, indem sie explizit angegeben wird und die erforderlichen Argumente erhält. Zum Beispiel:

%Vor%

In einigen Fällen kann dies für schnelles Testen und zur Fehlerbehebung hilfreich sein.

    
user4322779 23.12.2014 23:29
quelle

Tags und Links