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