我在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>
。为什么会这样?
谢谢
答案 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>>