我在項目中使用Struct而不是簡單的Hash來爲鍵值對的集合提供語義名稱。然而,一旦我構建了結構,我需要輸出一個散列值。我在Ruby 1.9.3中。例如:將to_hash(或to_h)方法添加到Struct的優雅方式?
MyMeaninfulName = Struct.new(:alpha, :beta, :gamma) do
def to_hash
self.members.inject({}) {|h,m| h[m] = self[m]; h}
end
end
my_var = MyMeaningfulName.new
my_var.to_hash # -> { :alpha=>nil, :beta=>nil, :gamma=>nil }
是否有一個原因,結構不包括to_hash方法?這似乎是天作之合,但也許有一個根本原因,它不包括在內。其次,有沒有一種更優雅的方法來將一個通用to_hash方法構建到Struct中(通常是通過monkeypatching,或者通過模塊或繼承)。
爲了澄清問題的第二部分......因爲結構是類的工廠,我真的不知道如何添加to_hash功能(這將是很容易在任何傳統類)。 – GSP
如果您想澄清,您可以編輯問題 - 只需點擊問題文本下的**編輯**鏈接即可。順便說一句,好問題。 +1! – Linuxios