Was ist der Unterschied zwischen
object Application extends App {
println("Hello World")
}
und
object Application {
def main(args: Array[String]): Unit = {
println("Hello World");
}
}
Was ist der Unterschied zwischen
object Application extends App {
println("Hello World")
}
und
object Application {
def main(args: Array[String]): Unit = {
println("Hello World");
}
}
Antworten:
Das App-Merkmal ist eine bequeme Möglichkeit, ein ausführbares Scala-Programm zu erstellen. Der Unterschied zur Hauptmethode alternativ besteht (abgesehen von den offensichtlichen syntaktischen Unterschieden) darin, dass das App-Merkmal die Funktion zur verzögerten Initialisierung verwendet.
Aus den Versionshinweisen für 2.9 (siehe http://www.scala-lang.org/old/node/9483 )
Objekte, die das App-Merkmal erben, verwenden stattdessen die verzögerte Initialisierungsfunktion von Scala 2.9, um den gesamten Körper als Teil einer geerbten Hauptmethode auszuführen.
Eine weitere Neuerung des App-Schemas ist, dass Befehlszeilenargumente jetzt über den args-Wert (der von der Trait-App geerbt wird) zugänglich sind.
main
ist Methode und der Körper nicht wie erwartet ausgeführt. Wird es irgendwann nach dem Eintritt in main überhaupt ausgeführt?
main
Methode in der App
Eigenschaft, die in Ihr Application
Objekt eingemischt wird. Es gibt keine Magie, die über die Tatsache hinausgeht, dass die verzögerte Initialisierung den Körper Ihres Application
Objekts ausführt .
Diese beiden Fälle sind in der Scala-Skripterstellung nicht identisch.
object extends App
wurde nicht mit dem Befehl " scala MyObject.scala
" ausgeführt, aber das Objekt, das die Hauptmethode enthält , wurde mit dem Befehl " scala MyObject.scala
" ausgeführt. Was als Scala auf der Suche nach einem Objekt mit der Hauptmethode für die Skripterstellung beschrieben wurde.
Wenn Sie REPL oder Scala Workseet von Eclipse verwenden, müssen Sie in MyObject.main(Array[String]())
beiden Fällen explizit aufrufen .
Dieser einfache Tipp ist hilfreich für Anfänger wie mich.