2013-02-18 3 views
2

이렇게하면 단점 (원숭이 패치가있는 것 외에는)이 보이십니까?+ 연산자를 사용하여 병합 해시

class Hash 
    def +(other) 
    self.merge(other) 
    end 
end 

이 방법은 매우 편리하지만 문제가 될 수 있습니다.

+1

새로운 표준 방법으로 표준 루비 라이브러리에 패치를 적용하면 루비 코어에 문제가 발생하지 않을 것입니다. 좋습니다. 반면에 타사 라이브러리에 의존하는 경우 9001 번째 오프 사이트 gem/lib를 추가하는 중에 가끔씩 멈추는 경우가 있습니다. 이 경우 왜 _3rd-party-n-graph-parser_가 제대로 작동하지 않는지 이해할 수 없을 것입니다. 내가 상상할 수있는 유일한 경우는 외국 lib가'respond_to '를 사용할 것인가? : 거대한'case' 절 대신에 거대한 클래스의 인스턴스를 구별하기 위해 +'. – mudasobwa

답변

3

큰 단점은 없습니다. 아주 사소한 단점은 호출 스택에 추가 레벨을 추가하여 호출 속도가 약간 느려지는 것입니다.

class Hash 
    alias :+ :merge 
end 

이점은 당신이 += 구문 설탕을 사용할 수있을 것입니다 수 있습니다,하지만 당신은 += 대신 merge! 사용할 어디 유스 케이스 생각할 수 없다 :이 문제를 방지하려면 별칭을 사용할 수 있습니다. 이들의 차이점은 객체 ID가 변경되는지 여부입니다.

+0

감사합니다. 구현을 변경하여 별칭을 사용했습니다. – Mauricio

관련 문제