Als ich gem las, fand ich eine Methode namens define_method. Ich war mir nicht sicher, also habe ich nachgeschlagen. Wörtlich übersetzt definiert es die Methode. Eine Methode namens. Ich verstehe nicht mehr und mehr. ..
Schauen wir uns also ein Beispiel an.
ruby.rb
NUMBERS = %w(zero one two three four five six seven eight nine)
NUMBERS.each_with_index do |word, num|
define_method word do |i = nil|
i ? num * i : num
end
end
p two #=> 2
p two(2) #=> 4
p nine #=> 9
p nine(3) #=> 27
** define_method ist eine Methode, mit der Methoden dynamisch definiert werden können ** Selbst im obigen Beispiel sind die Methoden wie zwei und neun nicht direkt definiert. Es kann als Methode verwendet werden. Dies liegt daran, dass define_method zwei und neun Methoden dynamisch definiert.
ruby.rb
NUMBERS.each_with_index do |word, num|
define_method word do |i = nil|
i ? num * i : num
end
end
Das Wort wird im Argument von define_method übergeben. Dies ist der dynamisch definierte Methodenname. Word enthält Elemente des Arrays ["Null", "Eins", "Zwei", ... "Neun"]. Also könnte ich die zwei, neun Methoden anwenden.
Der Blockteil von define_method ist der Verarbeitungsinhalt der dynamisch definierten Methode.
ruby.rb
define_method word do |i = nil|
i ? num * i : num
end
Wenn i existiert, gibt es i * num und i * num zurück. Wenn es nicht existiert, gibt es num zurück.
Und ich bin das Argument der neu definierten Methode. Schauen wir uns zum Schluss noch einmal das Verarbeitungsergebnis an.
p two #=> 2 #Gibt num zurück, da kein Argument vorhanden ist
p two(2) #=> 4 #2 weil es ein Argument gibt* 2 = 4
p nine #=> 9 #Gibt num zurück, da kein Argument vorhanden ist
p nine(3) #=> 27 #9 weil es ein Argument gibt* 3 = 27
Dies ist das Ende der Erklärung von define_method. Ich hoffe, Sie finden es nützlich.
** 86 Tage, um ein vollwertiger Ingenieur zu werden **
Recommended Posts