2014-11-05 2 views
0

빌더를 사용하여 스칼라 클래스 인스턴스 내에 불변 HashMap을 채우고, 빌더에서 result()를 호출하는 메소드로 hashMap을 노출 할 계획이다.Scala에서 변경 불가능한 컨테이너 빌더에 대한 result() 호출은 얼마나 비쌉니까?

이 전화는 매우 저렴하거나 빠른 결과를 얻으려면이 결과를 회원 필드에 저장해야합니까? 각 호출 후에 실행되는 작업은 몇 자릿수 (예 : 5)의 순서로 지수 함수를 호출합니다.

+2

질문을 명확하게 바꾸고 싶습니다. 당신이 무엇을 요구하고 있는지 이해하기가 꽤 어렵습니다. 1) "객체 내부"라고 할 때, 스칼라 객체 또는 무언가의 인스턴스를 의미합니까? 2) 모든 result() 호출에서 해시 맵을 재 계산할 것인가? 3) "각 통화가 지수 함수로 두 번 (예를 들어 5) 통화하는 순서대로 실행되는 조작"이라는 의미가 무엇인지, 또는 관련성이 있는지는 알 수 없습니다. –

+0

@Diego 결과에 대한 호출은 HashMap이 최종 상태가 된 후에 수행됩니다. result()를 호출 한 후 실행되는 연산이 호출 자체보다 훨씬 비싸면 result()를 호출해도 문제가되지 않습니다. –

+0

내 답변을보고 문제를 올바르게 이해했는지 알려주십시오. –

답변

0

결과의 사용이 결과 계산보다 훨씬 더 비싸다면, 결과를 호출하는 것은 무시할 만하다. 사실 당신은 불변 결과를 사용할 때마다 매번 다시 계산할 필요가 없다.

어쨌든 소스 코드 here을 보면 result에 대한 호출이 매우 최적화 된 것처럼 보입니다. 그럼에도 불구하고 어딘가에 결과를 저장하지 않으려는 이유는 알지 못합니다. 약간 개선되었지만 할 수있는 일종의 자유입니다. :)

+0

필자는 오해가 있다고 생각한다. 나는 스칼라 콜렉션 라이브러리에 의해 제공되는 빌더를 사용하여 불변의 HashMap을 성장시키고있다. 이 빌더에 요소를 삽입하면 필자는 result() 호출이 무시 될 수 있도록 원칙적으로 일부 재 계산이 즉시 발생한다고 가정합니다. HashMap는 단순히 읽는 것만으로 다시 계산되지 않습니다. –

+0

질문에 관련 코드를 모두 게시 할 수 있습니까? '수입 scala.collection.immutable.VectorBuilder에게 클래스 HasVector { \t 개인의 Val VB는 = Vector.newBuilder [더블] \t 데프 추가 (D : 더블) = VB + = D DEF 다음 –

+0

사용 목적은 getVector = vb.result() }'처음에는 모든 요소가 추가 된 후 결과에 대한 호출이 이루어집니다. –