自定义IRB输出

时间:2012-06-27 13:40:53

标签: ruby irb inspect

我创建了一个名为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

1 个答案:

答案 0 :(得分: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