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

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

谢谢

最佳答案

我对 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>>

关于ruby - irb 和 pry 中相同 ruby​​ 代码的冲突输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17013948/

相关文章:

ruby - 可以使用数组作为方法吗?

ruby - github api v3 创建问题消息未找到

ruby - 如何在 Ubuntu 上从源代码编译 irb?

ruby - 有没有办法在 pry 中获取 Control+R 风格的递归命令历史搜索

ruby-on-rails - 在 Rails 中实现 session

ruby - 在 Ruby 中,如何在不调用函数对象的情况下显示或打印出它?

shell - 如何通过管道将输入和输出传送到交互式 shell?

ruby - IRB 错误 : undefined method 'split'

ruby-on-rails - Ruby 临时文件异常行为

ruby - 将 block 传递给映射函数