2014-03-07 7 views
3

저는 스칼라를 오랫동안 실험 해왔고 종종 불변의 데이터 구조를 선호하는 조언을 얻었습니다.관용적 인 스칼라에서 대용량 데이터 구조 업데이트

하지만 데이터 구조가 예 : 자주 업데이트 (..., 장면의 개체를 애니메이션 신경 그물을 훈련)가 필요 꽤 많은 객체를 가진 3D 장면 그래프, 큰 신경 네트워크, 또는 어떤이는 것 같다

  1. 런타임에 끔찍하게 비효율적이기 때문에 전체 객체 그래프를 끊임없이 다시 만들어야하기 때문에 업데이트해야하는 객체에 대한 참조가있을 때 프로그래밍 할 수 없기 때문에 012 터프 팅을 호출 할 수 없으므로 프로그래밍하기 어려운

  2. 객체 그래프를 복사하고 이전 객체를 업데이트 된 객체로 교체해야합니다.

관용적 인 스칼라에서는 어떻게 이러한 것들이 처리됩니까?

+0

1. 불변의 데이터 구조는 일반적으로 전체 데이터를 복사하지 않고 업데이트 할 수 있습니다. 2. 렌즈 들었어? (아마 관련 : http://stackoverflow.com/questions/3900307/cleaner-way-to-update-nested-structures) –

+1

@ GáborBakos 1. 실제로, 이러한 구조는 불변의 데이터 구조의 하위 집합이며 [영구] (https://en.wikipedia.org/wiki/Persistent_data_structure) 그리고 일부 내장 된 스칼라 컬렉션은 영구적입니다 (예 : List) 2. 렌즈가 마술 지팡이라도 적절한 맞춤법이 없어도 렌즈 사용 *은 쓸데없는 팁입니다 –

+0

@ om-nom-nom 의견을 주셔서 감사합니다. 스택 오버플로 링크가 렌즈 사용 방법을 알려주기를 바랬습니다. 나는 솔직히 렌즈가 그/그녀를 위해 일하지 않았거나 단지 알려지지 않았다고 궁금해했다. 내 의견이 불쾌하게 공식화되지 않았 으면 좋겠다. 그런 경우 사과한다. –

답변

4

스칼라는 다중 패러다임입니다 : OO이며 기능적이며 변경 가능하고 변경할 수 없습니다.

복잡한 그래프는 사용자가 식별 한 것처럼 가변적 인 상황에서보다 쉽게 ​​작업 할 수있는 데이터 구조의 한 예입니다. 그렇다면 데이터 구조를 변경할 수있게하십시오.

관용적 인 스칼라는 올바른 패러다임을 사용하여 문제를 해결하는 것입니다.

+0

질문은 바로 올바른 패러다임을 찾는 방법입니다. "불변성으로 인해 일이 너무 어려워 보인다. 나는 단지 변화 할 수있는 데이터 구조로 돌아갈 것이다"라는 말은 정말 간단 할까? 방금 http://stackoverflow.com/questions/9891522를 찾았습니다. 그래프 구조가 반드시 객체 그래프로 직접 표현 될 필요는 없다는 아이디어가 언급되었습니다 (연결은 객체 간의 참조로 나타납니다)). 사실, 엣지가 2 개의 노드에 대한 참조를 가진'Set'의 객체 일 경우, 그것을 갱신하는 것은'Set'에서 그 객체를 대체하는 것을 의미합니다. – herman

+0

@herman - 업데이트하기 어려운 갱신 가능 객체는 고유 ID 및 변경 불가능한 세트에 저장된 모든 실제 포인터를 가진 독립 객체 클라우드로 대체 될 수 있습니다. 때때로 이것은 도움이됩니다. 때로는 추가 혜택이없는 큰 두통입니다.그것은 정말로 세부 사항에 달려 있습니다. 가변성이 너무 어렵거나 느린 경우에는 가변성으로 되돌아 가야하지만, 특히 불변성이 제공 할 수있는 이점이 필요하지 않은 경우에는 그렇게하는 것이 타당한 이유입니다 (기준선을 제외하고는 더 어렵습니다. 발에서 너 자신을 쏜다 "이점). –

관련 문제