Разница между использованием признака App и основного метода в Scala
В чем разница между
object Application extends App {
println("Hello World")
}
а также
object Application {
def main(args: Array[String]): Unit = {
println("Hello World");
}
}
3 ответа
Черта App - удобный способ создания исполняемой скала-программы. Отличие от основного альтернативного метода (помимо очевидных синтаксических различий) в том, что в черте приложения используется функция отложенной инициализации.
Из заметок о выпуске для 2.9 (см. http://www.scala-lang.org/old/node/9483)
Объекты, наследующие черту App, вместо этого используют функцию отложенной инициализации в Scala 2.9, чтобы выполнить все тело как часть унаследованного основного метода.
Еще одна новая особенность схемы приложения заключается в том, что аргументы командной строки теперь доступны через значение args (которое унаследовано от trait App)
Эти два случая не совпадают в сценариях Scala.
object extends App
не был казненscala MyObject.scala
msgstr "команда, но объект, содержащий основной метод, был выполнен"scala MyObject.scala
msgstr "команда, которая была описана как scala, ищущая объект с основным методом для сценариев.
При использовании REPL или scala рабочий набор Eclipse, необходимо позвонить MyObject.main(Array[String]())
явно для обоих случаев.
Этот простой совет будет полезен для начинающих, как я.
Функция приложения реализована с использованием функциональности [[DelayedInit]], что означает, что поля объекта не будут инициализированы до того, как будет выполнен основной метод.