微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

ruby – 特定类的IRB静音输出

我正在使用一个包含大型实例数组的类.

每当我初始化这样的类时,例如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( ‘文件’)binary.grayscale.save.(:BIN).

解决方法

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

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调用通常只调用to_s的inspect(参见ruby-doc).因此,定义to_s通常应该有效.但是,如果检查没有在类(或其祖先)中调用to_s,则必须覆盖此检查.

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐