如何更改Ruby对象的pry/irb控制台显示值?

如何更改Ruby对象的pry/irb控制台显示值?,ruby,console,irb,pry,Ruby,Console,Irb,Pry,下面是一个简单的图形节点: Node = Struct.new(:value, :children) do def initialize(value, children=[]); super; end end 我经常想在pry或irb控制台中查看这一点。问题是,当我连接图形并查看节点时,我得到如下输出: [1] pry(main)> node => #<struct Node value=13, children= [#<struct Node va

下面是一个简单的图形节点:

Node = Struct.new(:value, :children) do
  def initialize(value, children=[]); super; end
end
我经常想在
pry
irb
控制台中查看这一点。问题是,当我连接图形并查看节点时,我得到如下输出:

[1] pry(main)> node
=> #<struct Node
 value=13,
 children=
  [#<struct Node
    value=23,
    children=
     [#<struct Node:...>,
      #<struct Node
       value=19,
       children=[#<struct Node:...>, #<struct Node value=10, children=[#<struct Node:...>]>]>]>,
   #<struct Node value=28, children=[#<struct Node:...>]>,
   #<struct Node value=2, children=[#<struct Node:...>]>,
   #<struct Node value=14, children=[#<struct Node:...>]>]>
但我仍然需要调用
put节点
,以查看以下内容:

[1] pry(main)> puts node
<13 [23, 28, 2, 14]>
=> nil
[1]撬动(主)>放置节点
=>零
只需在控制台中键入
节点
,即可获得原始的详细输出(在
pry
irb
中)。每当我想在调试器中查看更紧凑的
节点
表示时,键入
put
就很烦人

是否可以定义一些方法来覆盖对象的控制台显示值?(我原以为重写
inspect
可以做到这一点,但事实并非如此。)

您要查找的内容(在pry/irb中输出的内容)是

alias_method :inspect, :to_s
如果您已经将
节点重新定义为#s
,或者只是:

def inspect
  "<#{value} #{children.collect(&:value)}>"
end
def检查
""
结束

另外,请确保未安装
awesome\u print
gem。

定义
inspect
对控制台中的打印内容没有影响(除非我使用
put节点,这是我试图避免的)。我确实安装了
awesome\u print
,但它没有加载到所讨论的脚本中,因此如果这是问题的原因,我会感到惊讶。
awesome\u print
正在由
pry
加载,并且它在所有对象上都安装了monkeypatches
inspect
。有趣<代码>内部评级机构
也在这样做吗?我在那里得到了同样的结果。我真的不想卸载
awesome\u print
-有什么建议吗?有。如果要使用
awesome\u print
,请使用
put节点
;如果只想使用
节点
,请卸载
awesome\u print
。没有银弹。
def inspect
  "<#{value} #{children.collect(&:value)}>"
end