companion-object

Jakie jest uzasadnienie posiadania obiektów towarzyszących w Scali?

Czy istnieje przypadek, w którym potrzebny jest obiekt towarzyszący (singleton) dla klasy? Po co miałbym tworzyć klasę, powiedzmy Foo, a także tworzyć dla niej obiekt towarzyszący?

Jak działa magia metody apply () Scali?

W Scali, jeśli zdefiniuję metodę o nazwie apply w klasie lub obiekcie najwyższego poziomu, ta metoda będzie wywoływana za każ ... nsekwentne stosowanie mniejszego zestawu reguł, a nie wielu reguł z wieloma wyjątkami. Początkowo wydaje mi się to wyjątkiem.

Dlaczego obiekty towarzyszące klasy case rozszerzają FunctionN?

Kiedy tworzysz klasę case, kompilator tworzy odpowiedni obiekt towarzyszący z kilkoma zaletami klasy case: fabryczną metodą a ... e jako FunctionN: object HasApply { def apply(a: Int) = 1 } val i = HasApply(1) // fails // HasApply: (Int => Int)