Ich versuche diese Funktion zu verstehen.self.class_eval << DEF ... DEF
Was ich sehen kann, ist ein Attribut und Typ werden an die opal
() -Methode übergeben.
type_name
Dann nimmt seinen Wert von type
solange type
a Symbol
oder String
ist. Andernfalls wird die name
-Methode unter type
aufgerufen. Ich stelle mir vor, die name
Methode ist ähnlich der class
Methode, um die Klasse der type
Argument zu bekommen.
Nach self.class_eval
bin ich irgendwie verloren, aber meine Vermutung ist dies definiert möglicherweise einen Block von Code, um die Klasse von self
referenziert werden.
Wie das funktioniert, bin ich mir nicht sicher.
Würde mich freuen, wenn jemand erklären könnte, was nach self.class_eval << DEF
vor sich geht.
def opal(attr, type)
self.ds "#{attr}_id"
type_name = (type.is_a?(Symbol) || type.is_a?(String)) ? type : type.name
self.class_eval <<DEF
def #{attr}
if defined?(@#{attr})
@#{attr}
else
@#{attr} = if self.#{attr}_id
#{type_name}.get(self.#{attr}_id)
else
nil
end
end
end
def #{attr}=(value)
self.#{attr}_id = value.key
@#{attr} = value
end
DEF
end
warum wurde dies abgelehnt? Es ist programmierungsbezogen und die Frage scheint nicht unklar zu sein. –