【发布时间】:2011-03-08 11:45:06
【问题描述】:
我正在寻找一种在运行时将属性添加到我已经定义的类的方法,或者更好:
class Client
attr_accessor :login, :password
def initialize args = {}
self.login = args[:login]
self.password = args[:password]
end
end
但是,我有这个哈希
{:swift_bic=>"XXXX", :account_name=>"XXXX", :id=>"123", :iban=>"XXXX"}
我希望这个哈希成为我的客户端实例的一部分,比如
client = Client.new :login => 'user', :password => 'xxxxx'
然后用神奇的魔法
client @@%$%PLIM!!! {:swift_bic=>"XXXX", :account_name=>"XXXX", :id=>"123", :iban=>"XXXX"}
我可以访问
client.swift_bic => 'XXXX'
client.account_name => 'XXXX'
client.id => 123
而且我还想保持适当的对象结构,例如:
Client.new(:login => 'user', :password => 'xxxxx').inspect
#<Client:0x1033c4818 @password='xxxxx', @login='user'>
魔法之后
client.inspect
#<Client:0x1033c4818 @password='xxxxx', @login='user', @swift_bic='XXXX', @account_name='XXXX' @id => '123', @iban => 'XXXX'>
这会给我一个非常漂亮且格式正确的 json
有可能吗?
我从 web 服务获取这个哈希,所以我不知道那里是否有一个新属性,然后我必须在他们每次对其服务执行升级时更新我的应用程序。 所以,我有点想避免这种情况:/
谢谢各位。
:)
【问题讨论】:
-
如果这个类所做的只是存储数据,那么我会使用 OpenStruct。它的存在正是为了这个目的。 ruby-doc.org/core/classes/OpenStruct.html
标签: ruby class dynamic hash properties