我有一个扁平的哈希:
hash = Hash["prop_one" => 100, "prop_two" => 200, "prop_three" => 300]
我已将它包装在一个类中,该类通过访问器公开这些值以读取:
class WrappedHash
def prop_one
config['prop_one']
end
def prop_two
config['prop_two']
end
def prop_three
config['prop_three']
end
def initialize(config)
self.config = config
end
end
有没有办法将这些属性的请求代理到哈希,而无需手动添加访问者? (这是一个很大的哈希)
答案 0 :(得分:3)
如果您有动态哈希键,请使用OpenStruct;如果密钥是静态的,并且性能很重要,请使用Struct。
OpenStruct可以通过marshal_dump
方法
答案 1 :(得分:2)
您还可以实现method_missing方法。当obj被发送一个它无法处理的消息时,它会被Ruby调用。
class WrappedHash
def method_missing(methId)
config[methId.to_s]
end
end