2017-03-03 12 views
1

여기에 간단한 그래프 노드입니다. 문제는 그래프를 와이어와 노드를 볼 때, 나는 다음과 같은 출력을 얻을 수 있습니다 :Ruby 객체의 pry/irb 콘솔 표시 값을 변경하려면 어떻게해야합니까?</p> <pre><code>Node = Struct.new(:value, :children) do def initialize(value, children=[]); super; end end </code></pre> <p>자주 나는 <code>pry</code> 또는 <code>irb</code> 콘솔이보고 싶을 :

[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를 입력하면 모두 (나에게 원래 자세한 출력을 제공합니다 pryirb). 디버거에서 node이라는 좀 더 컴팩트 한 표현을보고 싶을 때마다 puts을 입력하는 것이 귀찮습니다.

개체의 콘솔 표시 값을 재정의하기 위해 정의 할 수있는 방법이 있습니까? (내가 이런 짓을 했을까 inspect을 무시 생각하지만 그렇지 않습니다.)

답변

0

뭘 (무엇을 놀리려는/IRB에서 출력되는)을 찾고있는 것은 Node 위해 이렇게 간단하게 alias_method, Object#inspect의 결과입니다

당신이 awesome_print 보석이 설치되지 않은 있는지 확인하십시오, 또한

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

:

alias_method :inspect, :to_s 
당신은 이미 Node#to_s, 또는 단지를 재정의 한 경우.

+1

'inspect' 정의는 ('puts node'를 사용하지 않는 한) 콘솔에 출력되는 것에 영향을주지 않습니다. 이것은 피하려고합니다. 나는 awesome_print가 설치되어 있지만 문제의 스크립트에로드되지 않았으므로 문제가 발생하면 놀랄 것입니다. – Sasgorilla

+0

'awesome_print'는'pry'에 의해로드되고 모든 객체에 대해'inspect'를 monkeypatches합니다. – mudasobwa

+0

흥미 롭습니다. 'irb '도 똑같은 일을하고 있니? 나는 거기에서 같은 결과를 얻는다. 나는 정말로'awesome_print'를 제거하고 싶지 않습니다 - 이것을 처리하는 방법에 대한 제안은 무엇입니까? – Sasgorilla

관련 문제