Ich habe ein Projekt, wo ich dynamisch Attribute für eine Klasse erstellen und diese Attribute werden auch als Hash in einer anderen Eigenschaft gespeichert, die als eine Sammlung all dieser Attribute und ihrer Werte dient. Was ich möchte in der Lage sein, das Attribut zu tun ist, zu aktualisieren, wenn der Hash aktualisiert wird und umgekehrt.Update-Attribut auf der Grundlage der Aktualisierung von Hash
Etwas wie folgt aus:
class SomeClass
def initialize
#code that creates the attributes on the class
config_list.each { |config| self.class.send(:attr_accessor, config) }
end
#list of attributes that are dynamically added to the class
#this is normally read from a config file but I added it here to simplify
def config_list
[:abc, :def, :ghi]
end
def configuration
config_list.inject({}) do |r,e|
r[e] = instance_variable_get("@#{e.to_s}"); r
end
end
end
Verbrauch:
x = SomeClass.new
#=> #<SomeClass:0x007f9931990710>
x.abc = 5
#=> 5
x.configuration
#=> {:abc=>5, :def=>nil, :ghi=>nil}
x.configuration[:abc] = 10
#=> 10
x.abc
#=> 5
ich das letzte Aufforderung von möchten:
x.abc
10 zurück, weil der Wert der Konfiguration aktualisiert wurde . Ist das möglich? Wenn ja, wie mache ich das? Hier
@engineersmnky auslesen würde, obwohl beide Richtungen das funktionieren? Ich mag „@configuration“ aktualisiert werden, wenn die „@abc“ aktualisiert und „@abc“ aktualisiert, wenn „@configuration“ aktualisiert –