Qual é a diferença entre uma classe com um objeto complementar e uma classe e um objeto com o mesmo nome?

O "objeto complementar" da classe Scala pode ser visto como um objeto singleton com o mesmo nome completo da classe (ou seja, o mesmo nome, no mesmo pacote). Eles são usados ​​para manter funções de utilitário comuns a todas as instâncias da classe, como um substituto para o Javastatic métodos.

No entanto, em vários lugares nos documentos e nas perguntas, diz-se que os objetos complementares devem ser definidos na mesma unidade de compilação. Por exemplo, eles devem ser definidos no mesmo arquivo;objetos complementares não podem ser definidos para objetos Java; no REPL, eles devem ser definidos na mesma linha de entrada, daí a mensagem de aviso:

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.

Isso implica que deve haver uma distinção entre uma classe com seu objeto associado e apenas uma classe e um objeto com o mesmo nome (totalmente qualificado). Qual é essa distinção?

questionAnswers(1)

yourAnswerToTheQuestion