Ruby 将对象显示为名称-值对而不是实例变量

Ruby 将对象显示为名称-值对而不是实例变量,ruby,Ruby,我正在尝试实现一个gem,它是其他库的redis包装器,即在redis中存储ruby对象 一切都很好,但我想要的是 [Class]。所有 它给这样的物体 [#,#] 但我希望它看起来像是活动记录呈现对象的方式 [#,#] 原因是我不想向用户显示@payload实例变量,因为它是由另一个库设置的 所以基本上是这样的 [我的宝石] class Peagon include SomeModule attr_accessor :name,:omg,:handler def initialize(

我正在尝试实现一个gem,它是其他库的redis包装器,即在redis中存储ruby对象

一切都很好,但我想要的是

[Class]。所有
它给这样的物体

[#,#]

但我希望它看起来像是活动记录呈现对象的方式

[#,#]

原因是我不想向用户显示
@payload
实例变量,因为它是由另一个库设置的

所以基本上是这样的 [我的宝石]

class Peagon
 include SomeModule
 attr_accessor :name,:omg,:handler 
 def initialize(options)
   @name = options[:name]
   @omg  = options
   self.payload_object = options[:payload_object]
 end

end 
现在,[其他库]中有这个
模块

module SomeModule 
 def payload=(object)
   @payload ||= object
   self.handler = @payload.to_yaml

 end 

 def payload
   @payload ||= YAML.load(self.handler)
 end
结束

注: 我不想覆盖其他库中的有效负载方法


现在是否有可能得到我上面的意思

看起来您只是想调整
irb
、Rails控制台和friends将为您的类对象显示的内容。如果是这样,他们只需打电话:

检查→ 字符串

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

因此,您只需提供自己的
inspect
实现,例如:

def inspect
  "#<#{class} name: #{@name.inspect} ...>"
end
def检查
"#"
结束

Opps我忘了提到我也尝试过这种方法,我给出了这个方法,因为
inspect
返回字符串对象,因此无法调用对象/实例方法,但在activerecord中,它给了您类的对象,这样您就可以在任何其他方法上调用对象/实例方法,从而返回类的对象具有所需的行为对不起,我不明白。当我在Rails控制台中说
Model
时,我得到的结果是
Model(id:integer,…)
,因为这是
inspect
为类所说的;如果我说
Model.first
,我会得到
#
,因为这就是
inspect
对实例所说的。所有这些都与获取“具有所需行为的类的对象”无关。Opps:P我现在在想,inspect会返回交叉检查的字符串对象,谢谢