«Компаньон-объект» класса Scala можно рассматривать как объект-одиночку с тем же полным именем, что и у класса (, то есть с тем же именем, в том же пакете ). Они используются для хранения служебных функций, общих для всех экземпляров класса, в качестве замены методов Java static
.
Однако в разных местах документации и в вопросах говорится, что сопутствующие объекты должны быть определены в одной и той же единице компиляции. Например, они должны быть определены в одном и том же файле; сопутствующие объекты не могут быть определены для объектов Java ; в REPL они должны быть определены в одной и той же строке ввода , поэтому предупреждающее сообщение:
warning: previously defined class Foo is not a companion to object Foo.
Companions must be defined together; you may wish to use :paste mode for this.
Это означает, что должно быть различие между классом с сопутствующим ему объектом и просто классом и объектом с одним и тем же (полным )именем. Что это за различие?