Технически существует только одна такая вещь, в спецификации языка она в основном называется «модулем», но вы также можете найти это утверждение: «Определение объекта определяет один объект (или: модуль) ...» (Спецификация языка Scala)
Кроме того, об объекте companion можно говорить только тогда, когда он действительно что-то сопровождает:
"Как правило, сопутствующий модуль класса - это объект, который имеет то же имя, что и класс, и определен в той же области и в той же единице компиляции. И наоборот, класс называется сопутствующим классом модуля ". (снова подумайте: объект-компаньон = модуль-компаньон)
Пребывание в состоянии компаньона добавляет функции сопутствующему классу, а именно видимость (например, класс может видеть закрытые поля сопутствующего модуля). Одинаковая область видимости и единица компиляции означает, что они должны быть определены в одном и том же исходном файле и в одном пакете.
Существует интересная ветка на LtU, в которой обсуждается терминология Scala «объект против модуля». Он также содержит ссылку на статью Одерского и Зенгера, если вы заинтригованы; показывая, как они особенно смотрели на модульную систему языка ML (OCaml оказал большое влияние на Scala), и как они формулируют ее как различные подходы модульной композиции (предполагая, что модуль является более общей концепцией; черты как модули миксинов, ... )
person
0__
schedule
29.06.2012
module
когда-то был ключевым словом Scala. Он был изменен наobject
, чтобы сделать язык более доступным для основных разработчиков. - person missingfaktor   schedule 29.06.2012