Почему интерпретатор Scala называет определенный объект «модулем»?

scala> object Test
defined module Test

Почему определенный объект Test называется «модулем», а не сопутствующим объектом, интерпретатором scala?

Есть ли разница между модулем и сопутствующим объектом или это одно и то же с двумя разными именами?


person John Threepwood    schedule 29.06.2012    source источник
comment
Я думаю, что module когда-то был ключевым словом Scala. Он был изменен на object, чтобы сделать язык более доступным для основных разработчиков.   -  person missingfaktor    schedule 29.06.2012
comment
Эта суть может немного помочь.   -  person missingfaktor    schedule 29.06.2012
comment
Спасибо за дополнительную информацию.   -  person John Threepwood    schedule 30.06.2012


Ответы (1)


Технически существует только одна такая вещь, в спецификации языка она в основном называется «модулем», но вы также можете найти это утверждение: «Определение объекта определяет один объект (или: модуль) ...» (Спецификация языка Scala)

Кроме того, об объекте companion можно говорить только тогда, когда он действительно что-то сопровождает:

"Как правило, сопутствующий модуль класса - это объект, который имеет то же имя, что и класс, и определен в той же области и в той же единице компиляции. И наоборот, класс называется сопутствующим классом модуля ". (снова подумайте: объект-компаньон = модуль-компаньон)

Пребывание в состоянии компаньона добавляет функции сопутствующему классу, а именно видимость (например, класс может видеть закрытые поля сопутствующего модуля). Одинаковая область видимости и единица компиляции означает, что они должны быть определены в одном и том же исходном файле и в одном пакете.


Существует интересная ветка на LtU, в которой обсуждается терминология Scala «объект против модуля». Он также содержит ссылку на статью Одерского и Зенгера, если вы заинтригованы; показывая, как они особенно смотрели на модульную систему языка ML (OCaml оказал большое влияние на Scala), и как они формулируют ее как различные подходы модульной композиции (предполагая, что модуль является более общей концепцией; черты как модули миксинов, ... )

person 0__    schedule 29.06.2012
comment
Совет: объекты-компаньоны с чертами работают так же, как и с классами. - person ayvango; 30.06.2012