«Компаньон-объект» класса 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.
Это означает, что должно быть различие между классом с сопутствующим ему объектом и просто классом и объектом с одинаковым (полным) именем. Что это за различие?