Używam Struct w odróżnieniu od prostego skrótu w projekcie, aby zapewnić semantyczną nazwę kolekcji par klucz-wartość. Jednak po zbudowaniu struktury muszę wygenerować wartość skrótu. Jestem w Rubim 1.9.3. Przykład:Elegancki sposób dodawania metody to_hash (lub to_h) do 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 }
Czy istnieje powód, dla którego Struct nie zawiera metody to_hash? Wydaje się to być naturalne dopasowanie, ale być może istnieje przyczyna, dla której nie jest uwzględnione.
Po drugie, czy istnieje bardziej elegancki sposób na zbudowanie ogólnej metody to_hash w Struct (ogólnie, za pomocą makrowania lub poprzez moduł lub dziedziczenie).
Aby wyjaśnić drugą część pytania ... Ponieważ Struct jest fabryką klas, nie jestem pewien, jak dodać funkcjonalność to_hash (co byłoby łatwe w każdej tradycyjnej klasie). – GSP
Jeśli chcesz wyjaśnić, możesz edytować pytanie - po prostu kliknij link ** edit ** pod tekstem pytania. Przy okazji, dobre pytanie. +1! – Linuxios