2013-08-27 3 views
1

불변의 컬렉션에 적용되는 스칼라 컬렉션 작업은 구조 공유로 인해 이전 구조의 많은 부분을 공유하는 새 컬렉션을 반환합니다.변경 가능한 모음에 대한 불규칙한 작업 스칼라

내 질문은 : 이러한 작업은 또한 새로운 구조를 반환하는 가변 데이터 구조에 적용될 수 있다는 점을 고려하면 불변의 컬렉션에 대한 구조적 공유가 적절하게 이루어지고 있습니까?

답변

3

아니요, 구조 공유는 공유되는 부품이 절대 변경되지 않을 때만 가능합니다. 예를 들어, 불변의리스트를 가져옵니다. prepend가 원래의 요소를 제외한 모든 요소를 ​​공유하는 목록을 반환하는 것이 안전 한 이유는 원래 요소가 절대로 변경되지 않는다는 것입니다. 이 보장이 적절하지 않은 경우, 전치 방법은 원본 목록을 변경하여 새 목록에 영향을 미치지 않도록 전체 목록을 복사해야합니다. 변경 가능한 모음의 경우이 보증은 제공되지 않으므로 (원래 모음이 실제로 변경 될 수 있으므로) 변경 가능한 모음은 구조 공유를 사용할 수 없습니다.

1

아니요. 이러한 공유는 수정 된 내용으로 새 개체를 반환하고 새 개체가 수정 될 때 원본 모음을 수정하지 않기 때문에 불가능합니다. 불변성은 다른 객체가 변경 될 때 한 객체를 변경할 위험을 없애기 때문에 공유 구조는 변경 불가능한 컬렉션에서만 잘 작동합니다.

물론 콘텐츠 수준에서 공유가 있습니다. mutable.List[String]에서 새 목록은 원본과 동일한 String 인스턴스에 대한 참조를 사용하지만 그것이 끝나는 곳입니다.