ruby 如何修改类打印输出

7uzetpgm  于 12个月前  发布在  Ruby
关注(0)|答案(2)|浏览(123)

我有一些类,它们有很大的示例变量。当我初始化这些类时,附加到它们的大型示例变量会沿着输出,导致输出占用了整个shell,有点烦人。有没有一种方法可以覆盖我的类在终端中返回时的输出,以避免这种情况?

eeq64g8w

eeq64g8w1#

我明白你的意思.每隔一段时间,我必须处理一个有几个屏幕打印输出的对象。当它不是单个对象时,它是一个集合。
我这样做是为了防止它淹没我的屏幕

my_obj = get_a_huge_object_or_collection; nil

在这种情况下,nil成为这个表达式的值并被打印出来。
但是如果你真的想永久地改变对象打印到控制台的方式,你可以重写inspect

z4iuyo4d

z4iuyo4d2#

Sergio Tulentsev已经给出了如何抑制冗长输出的答案。
另一个选项可能是更改该类的示例的输出方式。这可以通过定义一个自定义的inspect方法来实现。
假设你有一个像这样的类Foo

class Foo
  attr_accessor :bar
end

你会看到这样的输出:

foo = Foo.new
foo.bar = "extremely long value"

foo
#=> #<Foo:0x00007ffab9aaf3f0 @bar="extremely long value">

但是,当你向类中添加一个自定义的inspect方法时,你可以控制输出的样子,比如,你可以截断长属性,或者只显示最有趣的值:

class Foo
  attr_accessor :bar

  def inspect
    "#<Foo @bar=\"#{bar[0,8]}...\">"
  end
end

foo = Foo.new
foo.bar = "extremely long value"

foo
#=> #<Foo @bar="extremel..."

相关问题