2014-07-05 8 views
5

Ich bin neu in Scala, und ich habe noch nie ein Programm geschrieben oder kompiliert. Ich versuche, die folgende Hallo Welt Beispiel einfach zu laufen, die ich in einem Dateinamen scalaApp.scalaWie kompiliere ich Scala Hallo Welt Anwendung

object scalaApp extends App { 
    def main(args: Array[String]) { 
     println("Hello, world!") 
    } 
} 

Wenn ich das Terminal gehen Verzeichnis und geben Sie in der Datei „scalac scalaApp.scala“ gespeichert haben, ich erhalten die folgende Fehlermeldung:

scalaApp.scala:4: error: overriding method main in trait App of type (args: Array[String])Unit; 
method main needs `override' modifier 
    def main(args: Array[String]) { 
     ^
one error found 

ich dachte, ich die Anweisungen alle Scala installieren 2.10.3 auf meinem Computer korrekt befolgt würde, aber ich weiß nicht, wie es zu testen, da ich nicht einmal kompilieren Dieses einfache Programm. Wenn ich "scala" in das Terminal eintippe, bekomme ich eine Scala-Eingabeaufforderung, auf der ich Befehle wie "1 + 1" ausführen kann. Ich bin mir nicht sicher, wie viel das zeigt. Ich habe die Variable SCALA_HOME zu ~/.profile hinzugefügt und SCALA_HOME zur Variable PATH in ~/.profile hinzugefügt. Wenn jemand mir sagen könnte, was ich falsch mache, oder mir einen Vorschlag geben, wo ich eine Antwort finden könnte, würde ich es begrüßen.

Antwort

11

Seit App extends DelayedInit, sollten Sie eine main Funktion nicht definieren

Dies sollte genug sein:

object scalaApp extends App { 
    println("Hello, world!") 
} 

Der Compiler diese Funktion für Sie erstellt und es in die delayedInit(x: => Unit) Methode übergeben wird (man beachte die call-by-name in the parameter).

wird der Compiler emittieren:

object Main extends DelayedInit { 
    def delayedInit(x: => Unit = { println("Hello, worl!") }) = // impl is left for us to fill in 
} 
+0

Danke, das es tat. Die Webseite, von der ich diesen schlechten Code bekommen habe, war http://www.scala-lang.org/documentation/getting-started.html. War dieser Code nur für eine frühere Version von Scala korrekt? Es ist irgendwie entmutigend, so viele Probleme zu haben, ein einfaches Beispiel zu bekommen, das nur die Installation testen sollte. –

+3

@StevenEdmunds Ich sehe Ihren ursprünglichen Code auf dieser Seite nicht. Entweder erweitern Sie nicht 'App' und haben eine' main' Funktion, oder Sie erweitern 'App' und haben keine' main' Funktion. Beide Fälle sind auf der Seite dargestellt, auf die Sie verweisen. – VonC

+0

Ja, Sie haben wieder Recht, ich habe den Inhalt des Objekts in die von der Eclipse-IDE erstellte Schablone für die Scala-Anwendung eingefügt und den Unterschied nicht bemerkt. Ich denke, dass ich zu ungeduldig und frustriert werde, wenn ich Dinge wie die Einrichtung und Konfiguration von Umgebungen mache, und ich werde langsam schlampig und sehe Dinge übersehend. Ich weiß es zu schätzen, dass Sie sich die Zeit genommen haben, mich über all das aufzuregen. –

0

Wenn Sie eine .jar-Datei kompilieren, begegnete ich den Fehler.

spark-submit-2.2 sequential-assembly-1.0.0-SNAPHOST.jar 
Error: No main class set in JAR; please specify one with --class 

Dann hängten ich meinen Code zu

object getdata{ 

    def main(args: Array[String])={ 
     println("Hello World") 

    } 
} 
+0

bash-4.2 $ spark-submit-2.2 sequentielle-assembly-1.0.0-SNAPHOST.jar Hallo Welt bash-4.2 $ –