使用哈希定义的访问器方法动态创建对象的最简单方法是什么?例如,如果我有一个哈希:
{foo: "Foo", bar: "Bar"}
我想要一个对象,它分别具有访问器方法foo
、foo=
、bar
和bar=
初始值"Foo"
、 和"Bar"
。我可以想到做:
module ObjectWithAccessor
def self.new h; Struct.new(*h.keys).new(*h.values) end
end
o = ObjectWithAccessor.new(foo: "Foo", bar: "Bar")
o.foo # => "Foo"
但是,我不需要它们的多个实例具有相同的特定键集,而是希望每次都使用可能不同的键集创建它的新实例,因此Struct
每次为每个对象创建一个新类似乎矫枉过正,我想避免这种情况。有一个更好的方法吗?