2011-06-20 14 views
16

Ostatnio wystąpiły problemy z kopiowaniem złożonego obiektu. Jego wewnętrzna organizacja składa się z kilku zagnieżdżonych obiektów. Zauważyłem, że clone() jest niedostępny.Jak klonować obiekty w Scali?

Jakie jest najlepsze rozwiązanie rozwiązania problemu?

+2

który obiekt? To robi ogromną różnicę, co to jest. Może jest prosta droga, może jest trudna droga i być może w ogóle nie ma mowy (a to może być dobry powód!). –

+2

Często najlepszym rozwiązaniem jest zaprojektowanie programu w taki sposób, aby uniknąć całkowitego klonowania. Dobre wsparcie Scala dla niezmiennych struktur danych czyni to szczególnie łatwym. –

+0

Należy zauważyć, że jeśli obiekt jest klasą przypadku, istnieje metoda kopiowania generowana przez kompilator, która pozwala na pełne kopiowanie oraz nadpisywanie tylko niektórych pól za pomocą nazwanych parametrów. – mpilquist

Odpowiedz

13

Jeśli ten złożony obiekt jest zmienny lub zawiera zmienne części, to rozwiązanie jest takie samo jak w Javie. Sprawdź pytania Java & posty na ten temat i zrób to.

Jeśli wszystko jest niezmienne, to nie potrzebujesz i nie powinieneś niczego klonować. W najlepszym przypadku powinieneś zrobić płytką kopię obiektu, zmieniając tylko te pola, które wymagają zmiany, aw najgorszym przypadku użyć czegoś w rodzaju soczewek lub zamków do skopiowania jakiegoś głębokiego obiektu i propagowania zmiany w górę. Zobacz pytania na temat Scali na temat soczewek i zamków do tego.