Ruby IRB使用什么来确定如何表示返回的实例?

Ruby IRB使用什么来确定如何表示返回的实例?,ruby,class,irb,Ruby,Class,Irb,给定一个Ruby类: class Foo def initialize(options={}) @sensitive = options.delete :sensitive end end 如果我在IRB中创建该类的实例,就会看到实例变量和内存地址 irb(main):002:0> Foo.new(sensitive: 'foo') => #<Foo:0x007fe766134a98 @sensitive="foo"> irb(main):002:0>

给定一个Ruby类:

class Foo
  def initialize(options={})
    @sensitive = options.delete :sensitive
  end
end
如果我在IRB中创建该类的实例,就会看到实例变量和内存地址

irb(main):002:0> Foo.new(sensitive: 'foo')
=> #<Foo:0x007fe766134a98 @sensitive="foo">
irb(main):002:0>Foo.new(敏感:“Foo”)
=> #
如果我创建AWS::S3的实例,我不会:

irb(main):003:0> require 'aws-sdk'
=> true
irb(main):004:0> AWS::S3.new(access_key_id: 'aki', secret_access_key: 'sak')
=> <AWS::S3>
irb(主):003:0>要求“aws sdk”
=>正确
irb(main):004:0>AWS::S3.新建(访问密钥id:'aki',机密访问密钥:'sak')
=>)

我是否可以告诉IRB不要输出实例变量和/或内存地址


(我已经尝试了
。to_
,但我得到了一个字符串,其中包含两个类的实例的内存地址,没有任何实例变量。)

用于呈现人类可读的调试输出的标准方法(不仅在IRb中,而且在一般情况下,例如在Rails错误页等)是
\inspect
。根据加载的扩展名、命令行选项或是否使用Pry而不是IRb,它也可能首先查找
#pretty_inspect

如果启动IRb
IRb--noecho
,它将抑制所有IRb检查。但我认为这不是你的问题

IRB使用方法。阅读文档中的行:

返回一个字符串,该字符串包含人类可读的
obj
表示形式。默认情况下,显示类名和实例变量及其值的列表(通过对每个变量调用
inspect
)。用户定义的类应该重写此方法,以便更好地表示
obj
。重写此方法时,它应返回编码与默认外部编码兼容的字符串

例如:

class Foo
   def initialize
      @x = 10
   end
   # customized inspection
   def inspect
    "0x%7x" % self.object_id.to_s
   end
end

foo = Foo.new
foo # => 0x118e27c

注意:我在自定义的
#inspect
方法中使用了该方法。

如果启动
irb--noecho
,它将抑制所有irb检查。但我认为这不是你的问题。IRB使用方法。从文档中读取行用户定义的类应覆盖此方法,以更好地表示obj。重写此方法时,它应返回一个编码与默认外部编码兼容的字符串。@ArupRakshit如果您的注释正确,则应将其转换为答案。这正是我想要的。我不知道,社区是否也会同意这一点。如果他们,我可以。哪一个用漂亮的?我不知道这个,但在某些情况下我想用它。不确定。我已经安装了
pry full
并专门使用它,它默认使用
pretty\u inspect
,例如,它会生成缩进良好的嵌套数组或散列;我还以为那是出自绝妙的印刷品。谢谢