Quand je lisais gem, j'ai trouvé une méthode appelée define_method. Je n'étais pas sûr, alors j'ai cherché. Traduit littéralement, il définit la méthode. Une méthode nommée. Je ne comprends pas de plus en plus. ..
Alors regardons un exemple.
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 est une méthode qui peut définir dynamiquement une méthode ** Même dans l'exemple ci-dessus, les méthodes telles que deux et neuf ne sont pas directement définies. Il peut être utilisé comme méthode. C'est parce que define_method définit dynamiquement deux et neuf méthodes.
ruby.rb
NUMBERS.each_with_index do |word, num|
define_method word do |i = nil|
i ? num * i : num
end
end
mot est passé dans l'argument de define_method. Il s'agit du nom de méthode défini dynamiquement. Word contient les éléments du tableau ["zéro", "un", "deux", ... "neuf"]. Je pourrais donc utiliser les deux, neuf méthodes.
Et la partie bloc de define_method est le contenu de traitement de la méthode définie dynamiquement.
ruby.rb
define_method word do |i = nil|
i ? num * i : num
end
Si i existe, il renvoie i * num et renvoie i * num. S'il n'existe pas, il renvoie num.
Et i est l'argument de la méthode nouvellement définie. Enfin, regardons à nouveau le résultat du traitement.
p two #=> 2 #Renvoie num car il n'y a pas d'argument
p two(2) #=> 4 #2 parce qu'il y a un argument* 2 = 4
p nine #=> 9 #Renvoie num car il n'y a pas d'argument
p nine(3) #=> 27 #9 parce qu'il y a un argument* 3 = 27
C'est la fin de l'explication de define_method. J'espère que tu trouves cela utile.
** 86 jours pour devenir un ingénieur à part entière **
Recommended Posts