Het attribute
class-methode van Ohm::Model
definieert accessor- en mutatormethoden voor het genoemde attribuut:
def self.attribute(name)
define_method(name) do
read_local(name)
end
define_method(:"#{name}=") do |value|
write_local(name, value)
end
attributes << name unless attributes.include?(name)
end
Dus als je zegt attribute :foo
, krijg je deze methoden gratis:
def foo # Returns the value of foo.
def foo=(value) # Assigns a value to foo.
Je zou kunnen gebruiken send
om de mutatormethode als volgt aan te roepen:
@ohm_obj.send((att + '=').to_sym, val)
Als je echt wilt zeggen @ohm_obj[att] = val
dan zou je zoiets als het volgende kunnen toevoegen aan je OhmObj
klas:
def []=(att, value)
send((att + '=').to_sym, val)
end
En je zou waarschijnlijk ook willen dat de accessor-versie de symmetrie behoudt:
def [](att)
send(att.to_sym)
end