为特定类静音IRB的输出

时间:2011-12-21 10:12:17

标签: 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)

4 个答案:

答案 0 :(得分:8)

此类问题的常见解决方法是在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

答案 1 :(得分:6)

您看到的输出是对象的to_s(或inspect)的结果。您可以为类定义/覆盖to_s(或inspect)以减少输出。 E.g。

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通常应该有效。但是,如果类(或其祖先)中有inspect未调用to_s,则必须覆盖此inspect

答案 2 :(得分:5)

禁用irb echoing:

conf.echo = false

gem utility_belt将为您提供命令quietverbose以禁用/启用输出(以及更多)。

答案 3 :(得分:1)

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