1
這裏有一個簡單的圖形節點:如何更改Ruby對象的pry/irb控制檯顯示值?
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:...>]>]>
等
這很快失控,難以閱讀。我可以定義一個更可讀的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
)。每次我想在調試器中查看node
的更緊湊表示時,都很煩人,因爲要輸入puts
。
是否有一些方法可以定義來覆蓋對象的控制檯顯示值? (我想重寫inspect
會做到這一點,但事實並非如此。)
定義'inspect'對控制檯中打印的內容沒有影響(除非我使用'puts node',這正是我試圖避免的)。我確實安裝了'awesome_print',但它沒有加載到有問題的腳本中,所以如果這導致了問題,我會感到驚訝。 – Sasgorilla
'awesome_print'正在被'pry'加載,它對所有對象進行monkeypatches'inspect'。 – mudasobwa
有趣。 'irb'也是這樣做的?我在那裏得到了相同的結果。我真的不想卸載'awesome_print' - 關於如何處理這個問題的任何建議? – Sasgorilla