1

我在 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)了,它会<<2>>在 irb 中正确返回,但在 pry 中它会错误地返回#<struct Number value=2>。为什么会这样?

谢谢你

4

1 回答 1

3

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

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

我的问题是:为什么不pry打电话inspect,它在做什么呢?查看代码,它看起来像是在调用pretty_inspect。可能有一个更聪明的解决方法,但我想到的最简单的事情就是别名pretty_inspectinspectfor Number

class Number
  alias_method :pretty_inspect, :inspect
end

Number.new(2)
# => <<2>>
于 2013-06-09T21:12:09.153 回答