2012-06-27 43 views
1

我创建了一个名为SpecialArray的类,我想定制输出irb显示的输出类型。目前,当我创建该类的新实例时,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应该只显示输出?

SOLUTION:

这是我最终创建的方法。

def inspect 
    output.inspect 
end 

回答

3

IRB调用Object#inspect方法来获取对象的字符串表示形式。所有你需要的是重写此方法类似:

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

然后在IRB你会得到:

>> Foo.new 
=> foo:70250368430260 

在您的特定情况下才使底层阵列,例如SpecialArray#inspect返回字符串表示:

SpecialArray 
    def inspect 
    @output.inspect 
    end 
end 
+0

聪明!谢谢! –

+0

如果它对你有帮助,如果你接受答案会很好。 –

+1

对不起。以为我有......现在被接受为答案。 –