2013-06-09 2 views
1

i를 IRB에서 다음을 수행하고 또한 내가 Number.new(2)을 할 경우, 올바르게 IRB에 <<2>>를 반환충돌하는 IRB에서 동일한 루비 코드에 대한 출력 올립니다

class Number < Struct.new(:value) 
end 

class Number 
    def to_s 
    value.to_s 
    end 

    def inspect 
    "<<#{self}>>" 
    end 
end 

이제 놀리려는에서 동일한 코드를 시도 ,하지만 잘못하여 #<struct Number value=2>을 반환합니다. 이게 왜 그렇게?

당신은

답변

3

나는 (내가 지금까지 그것을 사용한 적이) pry 잘 알고 아니에요 감사하지만, 질문에 대한 명확한 답은 pry이 개체에 inspect를 호출하지 않기 때문에. 당신은 수동으로 호출 할 수 있습니다, 그것은 예상대로 작동합니다

Number.new(2).inspect 
# => "<<2>>" 

내 질문이었다 : 왜 대신 무엇을하고 있는지 inspect를 호출 pry이 아니며,? the code을 보면 pretty_inspect이 대신 호출됩니다. 나를이기 떠오르는 스마트 해결하지만, 간단한 일이있을 수 있습니다 단지 pretty_inspectNumber에 대한 inspect에 별칭 :

class Number 
    alias_method :pretty_inspect, :inspect 
end 

Number.new(2) 
# => <<2>> 
+1

고마워요! :) – Jim