Aufruf selbst.senden Sie iterativ auf eine hash-argument initialisiert werden()
Ich versuche zu verstehen, der folgende Ruby-code.
Sieht es aus wie attrs
ist ein hash, der bekommt als argument übergeben mit einem default-Wert ein leerer hash.
Dann attrs.each
durchläuft die Schlüssel-Wert-Paare im hash (|k,v|
).
Welche Wirkung wird erreicht durch Aufruf self.send
auf die Elemente des key-value-pair-Mädchen während dieser iteration?
def initialize(attrs = {}, *args)
super(*args)
attrs.each do |k,v|
self.send "#{k}=", v
end
end
- +1 ich Liebe diesen code verwenden für eine flexible Objekt-Erstellung/Initialisierung. Siehe meine Antwort @ stackoverflow.com/questions/1778638/...
Du musst angemeldet sein, um einen Kommentar abzugeben.
send
ruft die Methode im ersten parameter, und übergibt den rest der Parameter, die als Argumente.In diesem Fall nehme ich an, was in
attrs
ist eine Liste von Parametern. Sagen wir mal es ist so etwas wie dieses:Also dann in der Schleife, tut es das auch:
entspricht
name=
, der muss bereits vorhanden sein. Zweitens, selbst innerhalb einer Instanz-Methode (wie initialisieren) bezieht sich auf die Instanz. So dies ist der Aufruf einer Instanz-Methode.name=
Methoden werden automatisch erstellt, indem dieattr_accessor :name
Helfer.