irb和pry中相同ruby代码的输出冲突

时间:2013-06-09 20:40:32

标签: ruby irb pry

我在irb中执行以下操作,并且还在pry中尝试了相同的代码

class Number < Struct.new(:value)
end

class Number
  def to_s
    value.to_s
  end

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

现在,如果我执行Number.new(2),它会在irb中正确返回<<2>>,但在pry中它会错误地返回#<struct Number value=2>。为什么会这样?

谢谢

1 个答案:

答案 0 :(得分:3)

我对pry不是很熟悉(我从来没有使用过它),但你问题的明显答案是:因为pry没有调用inspect在你的对象上。您可以手动调用它,它按预期工作:

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

我的问题是:为什么pry没有调用inspect,而是做了什么呢?查看the code,看起来它会调用pretty_inspect。可能有一个更聪明的解决方法,但我想到的最简单的事情就是将pretty_inspect替换为inspect Number

class Number
  alias_method :pretty_inspect, :inspect
end

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