Próbuję wygenerować attr_reader z hasha (z zagnieżdżonym hash), aby automatycznie odzwierciedlał tworzenie instancji instance_variable.Ruby: dynamicznie generuj attribute_accessor
tutaj jest to, co mam do tej pory:
data = {:@datetime => '2011-11-23', :@duration => '90', :@class => {:@price => '£7', :@level => 'all'}}
class Event
#attr_reader :datetime, :duration, :class, :price, :level
def init(data, recursion)
data.each do |name, value|
if value.is_a? Hash
init(value, recursion+1)
else
instance_variable_set(name, value)
#bit missing: attr_accessor name.to_sym
end
end
end
ale nie mogę znaleźć sposób, aby to zrobić :(
Jesteś moim nowym najlepszym przyjacielem !!!! to po prostu działa i jest takie proste ... Ruby to magia :) a TY jesteś gwiazdą :) (jestem szczęśliwy, bo szukałem chwilę) –
Po prostu szybkie pytanie więcej, czy jest jakikolwiek sposób na dodanie nazwy zawierający hasz zawierający nazwę elementu, aby mógłbym wywołać my_class.class.price lub coś w tym stylu? –
Po pierwsze, "klasa" jest zastrzeżonym słowem kluczowym, nie należy jej używać. Twoje drugie pytanie w twoim komentarzu wykracza poza zakres tego konkretnego pytania. Możesz chcieć rozpocząć nowe pytanie, ponieważ dotyczy ono rekurencji i innych, nie z akcesoriami do atrybutów. (PS, nie zapomnij przyjąć najlepszej odpowiedzi) – rdvdijk