2012-06-27 5 views
1

나는 SpecialArray라는 클래스를 작성했으며 어떤 종류의 출력을 사용자 정의하고 싶습니다. 현재 클래스의 새 인스턴스를 만들면 irb가 전체 객체를 반환합니다. 현재보고있는 내용은 다음과 같습니다.IRB 출력 사용자 정의

1.9.3p194 :022 > SpecialArray.new([1,2,0,6,2,11]) 
=> #<UniqueArray:0x007ff05b026ec8 @input=[1, 2, 0, 6, 2, 11], @output=[1, 2, 0, 6, 11]> 

그러나 출력으로 정의한 내용 만 표시하고 싶습니다. 다시 말해, 나는 이것을보고 싶다.

1.9.3p194 :022 > SpecialArray.new([1,2,0,6,2,11]) 
=> [1, 2, 0, 6, 11] 

irb는 출력 만 표시하도록 지정해야합니까?

해결 방법 :

이것은 내가 만들어 결국 방법입니다.

def inspect 
    output.inspect 
end 

답변

3

IRB는 Object#inspect 메서드를 호출하여 개체의 문자열 표현을 가져옵니다. 단지 기본 배열, 예를 들면의 SpecialArray#inspect 반환 문자열 표현을

>> Foo.new 
=> foo:70250368430260 

을 특정 경우 다음 IRB에 당신이 얻을 것이다 그리고

class Foo 
    def inspect 
    "foo:#{object_id}" 
    end 
end 

: 당신이 필요로하는 그런이 메소드를 오버라이드 (override)하는 것입니다 :

SpecialArray 
    def inspect 
    @output.inspect 
    end 
end 
+0

Clever! 고맙습니다! –

+0

도움이된다면 대답을 수락하면 좋을 것입니다. –

+1

죄송합니다. 내가 가진 생각 ... 이제는 대답으로 받아 들여지고 있습니다. –

관련 문제