2012-07-19 6 views
2

mutable 컬렉션을 복제하는 동안 초기 접근법은 clone() 메서드를 mutable.Cloneable 특성에 사용하는 것이 었습니다. 다만, 완전 복사는 아니고, 참조의 카피를 작성하는 java.Object.clone 구현을 연기합니다. 테스트에서, 나는 변경할 수 있습니다. {Queue, Seq, Set} 모든 얕은 사본.스칼라 collection.mutable.Cloneable 목적

원본이 아닌 새로운 xxx (copy : _ *) 방식을 사용하여 전체 복사본을 만들었지 만 구현되지 않은 경우 mutable.Cloneable 특성의 목적은 무엇입니까?

답변

5

mutable.Cloneable 특성은 많은 수집 클래스에서 구현되었습니다. 다음은 몇 가지 예입니다

https://github.com/scala/scala/blob/master/src/library/scala/collection/mutable/ArrayBuffer.scala#L176

https://github.com/scala/scala/blob/master/src/library/scala/collection/mutable/HashSet.scala#L82

https://github.com/scala/scala/blob/master/src/library/scala/collection/mutable/WrappedArray.scala#L78

그것은 단지 clone이 깊은 사본을 반환 정의되지 않은입니다. 그 이유는 원본을 변경하지 않고 어떤 방식 으로든 수정할 수 있도록 변경할 수있는 컬렉션을 복사하기를 원하기 때문입니다. 원본을 그대로 유지하려는 실제 요소가 그대로 유지됩니다.

깊은 복사본을 원한다면 사용자 지정 깊은 복사 라이브러리를 사용하거나 직접 구현해야합니다.