4
使用由散列定義的訪問器方法即時創建對象的最簡單方法是什麼?例如,如果我有一個哈希:使用訪問器方法即時創建對象
{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
似乎是矯枉過正的,我想避免這種情況。有一個更好的方法嗎?
請注意,OpenStruct是「開放的」,允許您通過錯字創建新屬性,而不是更新現有的屬性。 – Phrogz 2013-02-09 19:53:55
@Progrog好點。我添加了不允許的代碼(因爲它可能不被期望),同時還避免創建僅使用一次的類。 – 2013-02-09 23:35:22
感謝您的編輯。更大。 – sawa 2013-02-10 03:55:15