Разница между использованием признака 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.scalamsgstr "команда, но объект, содержащий основной метод, был выполнен"scala MyObject.scalamsgstr "команда, которая была описана как scala, ищущая объект с основным методом для сценариев.

При использовании REPL или scala рабочий набор Eclipse, необходимо позвонить MyObject.main(Array[String]()) явно для обоих случаев.

Этот простой совет будет полезен для начинающих, как я.

Функция приложения реализована с использованием функциональности [[DelayedInit]], что означает, что поля объекта не будут инициализированы до того, как будет выполнен основной метод.

Другие вопросы по тегам