2014-11-08 8 views
3

В Java программа запускается из статического основного метода класса. Но в Scala он начинается с основного метода объекта.Почему Scala начинается с основного метода объекта вместо статического основного метода класса?

Кто-нибудь знает рациональность такого проектирования?

Скала также предоставляет признак App, который может заменить метод main, если объект расширяет этот признак. Есть ли у кого-нибудь идеи, какой из них (или main) является предпочтительным?

Спасибо!

+1

Объекты являются статическими, поэтому объекты могут быть основными методами. Методы объектов являются статическими, поэтому методы объектов могут быть основными методами. –

+0

Объекты @RyoichiroOka не являются статическими. Они являются одноточечными, что означает, что существует реальный экземпляр, и он может передаваться как любой другой объект. – roterl

+1

@roterl Извините, я использовал термин «статический» в гораздо более широком смысле. –

ответ

1

Использование статики подобно глобальным функциям. Scala - это чисто объектно-ориентированный язык и не имеет статики. Но на самом деле компилятор Scala генерирует статическую основную для JVM. Рекомендуется использовать функцию «App» для коротких учебных программ.

+1

Почему просто «для коротких учебных программ»? Мне не известно о каком-либо недостатке использования приложения или написании явного основного метода. – AmigoNico

7

У Scala есть объекты с одним элементом вместо статических элементов java. Таким образом, основной метод объекта - это аналог основного статического метода java.

3

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

3

Я всегда расширяю App в своем классе и не знаю, почему кто-то захочет написать явный главный метод - за исключением, возможно, совместимости с каким-то другим кодом, который был слишком суетлив к таким вещам. Всякий раз, когда я вижу явный главный метод в Scala, мне интересно, очень ли старый код (предшествующий признаку App), или автор был знаком с Scala.

Но этот вопрос в основном связан с тем, почему дизайнеры Scala пропустили статические методы. Вы можете найти this question about how static members are not object-oriented полезным.

 Смежные вопросы

  • Нет связанных вопросов^_^