为特定类静音IRB的输出

All*_*ard 3 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
Run Code Online (Sandbox Code Playgroud)

问题是,我怎样才能使输出静音(所有结果都保存到文件中,从不在控制台中查看)或者使初始化程序不检查自身.我想返回self,因为我想要堆叠方法,例如image.load('file').binary.grayscale.save(:bin).

Mic*_*ohl 8

此类问题的常见解决方法是仅添加; nilIRB,例如i = Image.new ; nil.这样,最后评估的表达式nil也将被返回.

>> Foo.new 
=> #<Foo:0x00000000e3b9d0 @a=[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]>
>> Foo.new ; nil 
=> nil
Run Code Online (Sandbox Code Playgroud)


und*_*gor 6

您看到的输出是对象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>
Run Code Online (Sandbox Code Playgroud)

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


Tat*_*ela 5

禁用irb回显:

conf.echo = false
Run Code Online (Sandbox Code Playgroud)

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