这是一个简单的图形节点:
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:...>]>]>
等
这很快就会失控,难以阅读。我可以在Node上定义更具可读性的to_s
:
def to_s; "<#{value} #{children.collect(&:value)}>"; end
但我仍然需要致电puts node
来查看:
[1] pry(main)> puts node
<13 [23, 28, 2, 14]>
=> nil
只需在控制台中输入node
,即可获得原始的详细输出(pry
和irb
)。每次我想在调试器中查看puts
的更紧凑的表示时,输入node
会很烦人。
我可以定义一些方法来覆盖对象的控制台显示值吗? (我认为重写inspect
会做到这一点,但事实并非如此。)
答案 0 :(得分:0)
您要查找的内容(pry / irb中输出的内容)是Object#inspect
的结果,Node
只是alias_method
:
alias_method :inspect, :to_s
如果您已经重新定义Node#to_s
,或只是:
def inspect
"<#{value} #{children.collect(&:value)}>"
end
另外,请确保您没有安装awesome_print
gem。