Исходя из опыта ООП (Java), я изучаю Scala самостоятельно. Несмотря на то, что я легко вижу преимущества индивидуального использования неизменяемых объектов, мне трудно понять, как можно создать такое целое приложение. Я приведу пример:
Скажем, у меня есть объекты, которые представляют «материалы» и их свойства (я разрабатываю игру, поэтому у меня действительно есть эта проблема), например, вода и лед. У меня был бы «менеджер», которому принадлежат все такие экземпляры материалов. Одним из свойств будет точка замерзания и плавления, а также то, до чего материал замерзает или плавится.
[РЕДАКТИРОВАТЬ] Все экземпляры материала "singleton", вроде как Enum Java.
Я хочу, чтобы «вода» говорила, что она замерзает до «льда» при 0 ° С, а «лед» говорит, что она плавится до «воды» при 1 ° С. Но если вода и лед являются неизменными, они не могут получить ссылку друг на друга в качестве параметров конструктора, потому что один из них должен быть создан первым, а другой не может получить ссылку на еще не существующий другой в качестве параметра конструктора. Я мог бы решить эту проблему, дав им обоим ссылку на менеджера, чтобы они могли запросить его, чтобы найти другой экземпляр материала, который им нужен каждый раз, когда их спрашивают об их свойствах замораживания / плавления, но затем я получаю ту же проблему между менеджером и материалы, что им нужна ссылка друг на друга, но она может быть предоставлена в конструкторе только для одного из них, поэтому менеджер или материал не могут быть неизменными.
Они просто не могут обойти эту проблему, или мне нужно использовать «функциональные» методы программирования или какой-то другой шаблон для ее решения?
h2o
материал