特定类的IRB静音输出

  • 本文关键字:输出 IRB ruby
  • 更新时间 :
  • 英文 :


我正在处理一个包含大型实例数组的类。

每当我像这样初始化一个类时,例如i = Image.new,我从数组(@r, @g, @b -每个值~300k)中得到大量垃圾输出。

 class Image
   def initialize(width=640, height=480, brightness=64)
     @width, @height, @brightness = width, height, brightness
     self.load('usart.dat')
   end
   def load(file='usart.dat')
     self.reset
     f = IO.read(file, @height * @width * 2, 0)
     # Parsing the datafile, saving data in @r, @g, @b, @gray etc
     end
     return self
   end
   # ... More methods
 end

问题是,我如何能够沉默输出(所有结果保存到一个文件,从未在控制台查看)或使初始化器不检查自我。我想返回self,因为我想堆栈方法,例如image.load('file').binary.grayscale.save(:bin) .

解决这类问题的常见方法是在IRB中添加; nil,例如i = Image.new ; nil。这样,最后求值的表达式是nil,它也将返回。

>> Foo.new 
=> #<Foo:0x00000000e3b9d0 @a=[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]>
>> Foo.new ; nil 
=> nil

您看到的输出是您的对象的to_s(或inspect)的结果。您可以为您的类定义/覆盖to_s(或inspect)以产生更少的输出。例如

irb(main):001:0> class Foo
irb(main):002:1>   def initialize
irb(main):003:2>     @a = @b = @c = @d = 42
irb(main):004:2>   end
irb(main):005:1>
irb(main):006:1*   def to_s
irb(main):007:2>     'a Foo object'
irb(main):008:2>   end
irb(main):009:1> end
=> nil
irb(main):010:0> h = Foo.new
=> a Foo object
irb(main):011:0>

关于to_s/inspect: irb调用inspect,通常只调用to_s(参见ruby-doc)。因此,定义to_s应该正常工作。但是,如果在类(或其祖先类)中存在没有调用to_sinspect,则必须覆盖此inspect

禁用irb返回:

conf.echo = false

gem utility_belt会给你quietverbose命令来禁用/启用输出(以及更多)。

如果您更改Foo的返回值。new to not返回新的Foo对象,您将永远无法将新的Foo分配给任何变量。如果唯一关心的是偶尔滚动控制台视图,则使用";nil"方法。

最新更新