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