我正在尝试为其他库实现一个redis包装器的gem,即将redy对象存储在redis中。
一切运作良好,但我想要的是什么时候
[Class].all
它给出了像这样的对象
[#<Peagon:0x007fba589de3a0 @name="a", @omg=false ,@payload="one",@handler="--- one\n...\n"> ,#<Peagon:0x007fba589de1a0 @name="b", @omg=true,@payload="two",@handler="--- two\n...\n">]
但我希望它看起来像主动记录如何呈现对象
[#<Peagon name: "a",omg: false ,handler: "--- one\n...\n"> ,#<Peagon name="b", omg: true,handler: "--- two\n...\n">]
这样做的原因是我不想向用户显示@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
module SomeModule
def payload=(object)
@payload ||= object
self.handler = @payload.to_yaml
end
def payload
@payload ||= YAML.load(self.handler)
end
结束
我不介意从其他库中覆盖有效负载方法
现在可以得到我的意思
答案 0 :(得分:1)
看起来您只想调整irb
,Rails控制台和朋友将为您的班级对象显示的内容。如果是这样,他们只需拨打inspect
:
inspect→string
返回包含 obj 的人类可读表示形式的字符串。默认情况下,显示类名称以及实例变量及其值的列表(通过在每个变量上调用 inspect )。用户定义的类应该重写此方法,以更好地表示 obj 。
所以你需要做的就是提供你自己的inspect
实现,例如:
def inspect
"#<#{class} name: #{@name.inspect} ...>"
end