Scala: класс, объект, приложение в Eclipse Scala - PullRequest
1 голос
/ 19 сентября 2011

В плагине Eclipse я мог создавать scala Object, APP и class.Но в чем разница между этими тремя. В основном, для объекта я реализую def main (...), затем я могу его запустить.Но в классе это похоже на обычный Java-класс, но в чем смысл scala APP, он создает объект, расширяющий APP.Для чего это нужно?

Ответы [ 2 ]

4 голосов
/ 19 сентября 2011

В JVM отправной точкой приложения является статический метод main(String[] args) в некотором классе, переданном JVM.

В scala нет статических методов, эквивалентно помещать метод в объект (в отличие от class ).Помещение вашего основного метода в класс не будет работать, это то же самое, что не отмечать статический метод в Java.

App - помощник, который позволяет не писать метод main и помещать код напрямую.в теле объекта.

object MyApp extends App {
  doStuff
}

делает то же самое, что и

object MyApp {
  def main(args: Array[String]) {doStuff}
}

(аргументы могут использоваться в doStuff под именем args)

2 голосов
/ 19 сентября 2011

В Scala нет статических методов, поэтому public static void main недоступно для классов.Объекты - это отдельные записи, которые лучше соответствуют области видимости «общего для каждого объекта класса».Таким образом, упрощая вещи, вы можете думать об объекте как о синглтоне , который «действует как статический контейнер» (цитата из Scala для Java Refugees ).Если подумать, это идеальное место для основного метода, и поэтому они там объявлены.

Черта App просто исследует тот факт, что инструкции, написанные внутри тела объекта, выполняются как часть его инициализации.Это стандартное поведение сочетается с некоторыми трюками с отложенной инициализацией , чтобы использовать тело объекта в качестве основного метода.Таким образом, вы можете думать об этом как о коротком альтернативном синтаксисе для создания точки входа в приложение.Он заменил черту наивного Application , у которой было много недостатков.

Какой из двух вариантов использовать - дело вкуса, но я склонен придерживаться более знакомого синтаксиса основного метода.

Приветствия,

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...