Яка різниця між
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");
}
}
Відповіді:
Особливість програми - це зручний спосіб створення виконуваної програми масштабування. Різниця до альтернативного методу основного методу полягає (окрім очевидних синтаксичних відмінностей) у тому, що ознака програми використовує функцію затримки ініціалізації.
З приміток до випуску для версії 2.9 (див. Http://www.scala-lang.org/old/node/9483 )
Натомість об’єкти, що успадковують ознаку програми, використовують функцію відкладеної ініціалізації Scala 2.9 для виконання всього тіла як частини успадкованого основного методу.
Ще однією новою особливістю схеми програми є те, що аргументи командного рядка тепер доступні через значення args (яке успадковується від trait App)
main
метод, а тіло не виконується належним чином. Чи виконується воно взагалі в якийсь момент після входу в main?
main
методі, який App
відьма отримує, до вашого Application
об’єкта є метод . Ніякої магії не відбувається, окрім того, що відстрочена ініціалізація - це те, що виконує тіло вашого Application
об’єкта.
Ці два випадки не є однаковими для сценаріїв масштабування.
object extends App
не було виконано командою " scala MyObject.scala
", але об'єкт, що містить основний метод, був виконаний командою " scala MyObject.scala
". Що було описано як масштаб, що шукає об'єкт з основним методом сценаріїв.
При використанні REPL або робочої таблиці Scala Eclipse потрібно MyObject.main(Array[String]())
чітко зателефонувати для обох випадків.
Ця проста порада буде корисною для таких початківців, як я.