首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >如何更改Ruby对象的pry/irb控制台显示值?

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

Stack Overflow用户
提问于 2017-03-03 22:19:33
回答 1查看 788关注 0票数 2

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

代码语言:javascript
代码运行次数:0
运行
复制
Node = Struct.new(:value, :children) do
  def initialize(value, children=[]); super; end
end

我经常想在pryirb控制台中查看它。问题是,当我连接图形并查看节点时,我得到的输出如下:

代码语言:javascript
代码运行次数:0
运行
复制
[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

代码语言:javascript
代码运行次数:0
运行
复制
def to_s; "<#{value} #{children.collect(&:value)}>"; end

但我仍然需要调用puts node来查看以下内容:

代码语言:javascript
代码运行次数:0
运行
复制
[1] pry(main)> puts node
<13 [23, 28, 2, 14]>
=> nil

只需在控制台中输入node,就会得到原始的详细输出( pryirb格式)。每次我想在调试器中查看更紧凑的node表示形式时,输入puts都很烦人。

有没有什么方法可以定义来覆盖对象的控制台显示值?(我以为重写inspect可以做到这一点,但它没有。)

EN

回答 1

Stack Overflow用户

发布于 2017-03-03 22:22:38

您要查找的内容(以pry/irb格式输出的内容)是Object#inspect的结果,因此只需针对Node使用alias_method

代码语言:javascript
代码运行次数:0
运行
复制
alias_method :inspect, :to_s

如果您已经重新定义了Node#to_s,或者只是:

代码语言:javascript
代码运行次数:0
运行
复制
def inspect
  "<#{value} #{children.collect(&:value)}>"
end

此外,请确保您没有安装awesome_print gem。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42581245

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档