Pochodzę z OOP (Java), uczę się Scali na własną rękę. Chociaż łatwo dostrzegam zalety korzystania z niezmiennych obiektów indywidualnie, trudno mi jest dostrzec, jak można zaprojektować taką aplikację. Podam przykład:
Powiedzmy, że mam przedmioty reprezentujące „materiały” i ich właściwości (projektuję grę, więc naprawdę mam ten problem), takie jak woda i lód. Miałbym „menedżera”, który jest właścicielem wszystkich takich instancji materiałów. Jedną właściwością byłby punkt zamarzania i topnienia oraz to, do czego materiał zamarza lub topi się.
[EDYCJA] Wszystkie materialne wystąpienia są „singleton”, podobnie jak Java Enum.
Chcę, żeby „woda” powiedziała, że zamarza do „lodu” w 0 ° C, a „lód”, by powiedzieć, że topi się do „wody” w 1 ° C. Ale jeśli woda i lód są niezmienne, nie mogą uzyskać odniesienia do siebie jako parametrów konstruktora, ponieważ jeden z nich musi zostać utworzony jako pierwszy i nie można uzyskać odniesienia do nieistniejącego jeszcze innego jako parametru konstruktora. Mógłbym rozwiązać ten problem, podając im zarówno odwołanie do kierownika, aby mogli zapytać go, aby znaleźć inną istotną instancję, której potrzebują za każdym razem, gdy są proszeni o ich właściwości zamrażania / topienia, ale wtedy mam ten sam problem między kierownikiem i materiały, które potrzebują odniesienia do siebie, ale można je podać tylko w konstruktorze dla jednego z nich, więc ani menedżer, ani materiał nie mogą być niezmienne.
Czy po prostu nie można obejść tego problemu, czy też muszę użyć „funkcjonalnych” technik programowania lub innego wzoru, aby go rozwiązać?
h2o
materiał