将访问器映射到包装对象

时间:2013-01-17 10:40:31

标签: ruby hash proxy accessor

我有一个扁平的哈希:

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

有没有办法将这些属性的请求代理到哈希,而无需手动添加访问者? (这是一个很大的哈希)

2 个答案:

答案 0 :(得分:3)

如果您有动态哈希键,请使用OpenStruct;如果密钥是静态的,并且性能很重要,请使用Struct

OpenStruct可以通过marshal_dump方法

转换回Hash

答案 1 :(得分:2)

您还可以实现method_missing方法。当obj被发送一个它无法处理的消息时,它会被Ruby调用。

class WrappedHash
  def method_missing(methId)
    config[methId.to_s]
  end
end