1

我有一个平面哈希:

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

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

4

2 回答 2

3

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

marshal_dumpOpenStruct 可以通过它的方法转换回 Hash

于 2013-01-17T10:47:23.153 回答
3

您还可以实现 method_missing 方法。当 obj 收到无法处理的消息时,Ruby 会调用它。

class WrappedHash
  def method_missing(methId)
    config[methId.to_s]
  end
end
于 2013-01-17T10:51:51.533 回答