В чем разница между
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]())для обоих случаев необходимо явно вызывать .
Этот простой совет будет полезен новичкам вроде меня.