Estoy usando un Struct en lugar de un Hash simple en un proyecto para proporcionar un nombre semántico a una colección de pares de valores clave. Una vez que he construido la estructura, sin embargo, necesito generar un valor hash. Estoy en Ruby 1.9.3. Ejemplo:¿Forma elegante de agregar el método to_hash (o to_h) a 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 }
¿Existe una razón por la Struct no incluye un método to_hash? Parece un ajuste natural, pero tal vez haya una razón subyacente por la cual no está incluido.
En segundo lugar, hay una forma más elegante de crear un método genérico to_hash en Struct (generalmente, a través de monkeypatching, a través de un módulo o herencia).
Para aclarar la segunda parte de la pregunta ... Debido a que Struct es una fábrica de clases, no estoy seguro de cómo agregar la funcionalidad to_hash (que sería fácil en cualquier clase tradicional). – GSP
Si quiere aclarar, puede editar la pregunta; simplemente haga clic en el enlace ** editar ** debajo del texto de la pregunta. Por cierto, buena pregunta. +1! – Linuxios