考慮以下代碼:在初始化程序中使用另一個對象的構造函數?
Campus = ImmutableStruct.new(:id, :name, :timezone) do
def hash; id end
end
Merchant = ImmutableStruct.new(:id, :name, :campus) do
def hash; id end
end
通知的hash
方法的重複。我想用新類ImmutableStructWithId
刪除這個重複項。新課改將允許2行以上將被改寫爲:
Campus = ImmutableStructWithId.new(:id, :name, :timezone)
Merchant = ImmutableStructWithId.new(:id, :name, :campus)
如果紅寶石的初始化工作就像工廠函數(他們不這樣做),像下面是我想要的東西:
class ImmutableStructWithId
def initialize(*args)
ImmutableStruct.new(*args) do
def hash; id end
end
end
end
我知道上面是行不通的,因爲初始化不回他們創建的對象,他們只是初始化它。但如果他們做工作的工廠功能,上面是我想要做的。
在紅寶石中實現相同效果的正確方法是什麼?
另外,我沒有看到任何具體構造。你只是不想重複方法定義,不是嗎? –
正確。最終,我想避免重複散列定義,並只使用一個特定的類來烘焙。 – Jonah
然後裝飾者/委託人。 –