W Scala, czy AnyRef.clone
wykonuje płytką lub głęboką kopię?Czy Scala AnyRef.clone wykonuje płytką lub głęboką kopię?
Odpowiedz
Krótka odpowiedź: płytkie.
nie tak krótka odpowiedź: chyba że jest przesłonięta, AnyRef.clone() używa Java za Object.clone() jako jej realizacji.
Javadoc na Object.clone():
Klon Sposób klasa obiektu wykonuje określoną operację klonowania. Po pierwsze, jeśli klasa tego obiektu nie implementuje interfejsu Klonowalny, wówczas generowany jest wyjątek CloneNotSupportedException . Należy zauważyć, że wszystkie macierze są uznawane za implementujące interfejs Klonowalny. W przeciwnym razie ta metoda tworzy nową instancję klasy klasy tego obiektu i inicjalizuje wszystkie jej pola z dokładnie odpowiadającą polom odpowiednich obiektów tego obiektu, , jak przy przydziale; zawartość same pola nie są sklonowane. Tak więc ta metoda wykonuje "płytką kopię " tego obiektu, a nie operację "głęboka kopiowanie".
Uwaga:
- AnyRef.clone(), podobnie jak jego odpowiednik w języku Java, ma "chronione" poziom dostępu, więc jego nie wywoływalnym zewsząd.
- Będziesz musiał zaimplementować funkcję Cloneable, aby klon() działał.
Długa odpowiedź: Przeczytaj Effective Java, 2nd Edition, pkt 11: Zastąp klon rozważnie
Podsumowanie: nie używaj go. Istnieją lepsze alternatywy.
- 1. Czy Arrays.copyOf tworzy płytką lub głęboką kopię?
- 2. Czy metoda klonowania na tablicy głęboką lub płytką kopię?
- 3. Czy LINQ zwraca głęboką kopię kolekcji?
- 4. Jak zrobić płytką kopię listy w Pythonie
- 5. Jak mogę klonować obiekt (głęboką kopię) w Dart?
- 6. Jak zrobić głęboką kopię tablicy 2d w Javie?
- 7. Jak zrobić głęboką kopię elementu w LINQ do XML?
- 8. Jaka jest różnica między płytką kopią i głęboką kopią z tablicami JavaScript?
- 9. Czy Haxe przekazuje parametry przez odwołanie lub czy tworzy kopię?
- 10. Zastąp kopię lub copyWithZone: lub obie?
- 11. W python, w jaki sposób zrobić głęboką kopię dyktować do określonej głębokości?
- 12. W Pandach, czy metoda .iloc daje kopię lub widok?
- 13. Czy JUnit wykonuje sekwencje testowe?
- 14. Scala: Jak wykonać kopię klasy egzemplarza zachować informacje manifestu
- 15. Czy Jackson JSON wykonuje specjalny znak?
- 16. Jak ręcznie utworzyć kopię głęboki
- 17. Czy przechodzące pojemniki STL wykonują kopię?
- 18. Wielu klientów powinno mieć jedną kopię projektu lub każdy klient ma własną kopię?
- 19. jQuery Funkcja slideToggle ślizga div, a następnie natychmiast wykonuje kopię zapasową.
- 20. Czy nowa pamięć LINQ podczas tworzenia zwraca
- 21. Czy MVVM ViewModel wykonuje konwersję/sprawdzanie typu?
- 22. Jak ulepszyłbyś tę płytką klasę kopiowania?
- 23. env.Clone() w scons nie wykonuje kopii głębokiej
- 24. Czy biblioteka curl wykonuje javascript wewnątrz stron?
- 25. Django: Czy prefetch_related() wykonuje wyszukiwanie wstecznej relacji?
- 26. Czy "uruchamianie okna dokowanego" wykonuje polecenie CMD?
- 27. Scala ListBuffer (lub odpowiednik) shuffle
- 28. Administrator Django wbudowany w głęboką relację
- 29. Co wykonuje się najpierw: aktualizacja wiązania ToggleButton.IsChecked lub powiązanie poleceń?
- 30. Jak mogę wykonać kopię zapasową lub zsynchronizować wiadro Amazon S3?
"Istnieją lepsze alternatywy." Czy mógłbyś odwoływać się do niektórych? –
1. Skopiuj konstruktora, na C++. 2. Case class z wbudowaną metodą "copy" w Scala 2.8.x. 3. Używaj niezmiennych obiektów: nie musisz kopiować, po prostu udostępniaj. –
Czyli konstruktory kopii w stylu C++ są rzeczywiście (w rodzaju) w porządku w Scali? Przyszedłem do tego języka z C++ i zanim zrobiłem swoją pierwszą kopię, konstruktorzy chcieli sprawdzić, czy brakuje mi jakiegoś punktu. Wydaje się ... w porządku (moje obiekty mają zmienny stan). – akauppi