如何使Irb不打印对象属性

时间:2017-11-12 18:13:34

标签: ruby output irb

我希望irb不要默认打印我的对象属性。那可能吗?例如,我有:

class Test
  @tmp = nil
  def initialize(str)
    @tmp = str
    self
  end
end

我得到了:

irb> t = Test.new("hello")
=> #<Test:0x18f6198 @tmp="hello">

我不希望看到@tmp="hello"部分。

2 个答案:

答案 0 :(得分:4)

IRB默认调用inspect返回值。如果您想在IRB中压制或更改该输出,只需覆盖您班级中的inspect

class Test
  def initialize(str)
    @tmp = str
  end

  def inspect
    '<TEST CLASS>'
  end
end

test = Test.new('foobar')
#=> <TEST CLASS>

答案 1 :(得分:1)

设置检查器字符串,如下所示:

IRB.CurrentContext.inspect_mode = IRB::Inspector.new(->obj{
  "<##{obj.class}:#{obj.object_id}>"
})

然后在irb中,你会得到以下结果:

"foo"
# => <#String:47128160661240>