거의 모든 메소드 호출을 자식 객체 (기본적으로 위임자 패턴)로 전송하는 프록시 객체를 만들려고합니다. 대부분의 경우, 나는 단지 BasicObject를 사용하고 있고 method_missing을 가진 모든 호출을 자식 객체에 전달하고있다. 여태까지는 그런대로 잘됐다.루비의 대소 문자를 푸는 것 ===, 프록시 객체 사용
이x = Proxy.new(15)
Fixnum === x #=> false, no matter what I do
물론이 어떤 case x
작업이 실패하게, 프록시를 수 있다는 뜻 :
트릭은 내가 루비의 경우 연산자를 속일 수 없다, 그래서 난 할 수 없어, 그게 내가 수도로 시도이다 다른 도서관으로 안전하게 전달할 수 없습니다.
나는 내 인생을 위해 사용할 수있는 것을 알아 내지 못합니다.
x.is_a?(Fixnum) #=> true
x.instance_of?(Fixnum) #=> true
x.kind_of?(Fixnum) #=> true
x.class #=> Fixnum
그냥 피할 수없는 마법 어떤 종류의 일을 Module#===
가 : 프록시는 모두 올바르게 자식 개체에 전달 내가 알고있는 클래스 기반 성찰의 모든 잘 작동?
경고 단어 : is_a?, instance_of?, kind_of?, class 등을 위임하여 프록시를 'Fixnum'으로 위장하지 않고 목표를 달성 할 수 있다면 그렇게하십시오! 이 방법을 변경하면 코드를 사용하거나 유지 관리하는 사람이 디버깅에 직결 될 수 있습니다. – molf