[RUBY] Quel type de méthode est define_method?

Quel type de méthode est define_method?

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

Quel type de méthode est define_method?
Quel genre de StringUtil est bon
Quelle est la méthode pluck?
Quelle est la méthode d'initialisation?
'% 02d' Quel est le% de% 2?
Qu'Est-ce que c'est? ~ 3 types de "non" ~
Road to Java Engineer Part2 Quel type de langage est Java?
Qu'est-ce qu'un test? ・ À propos de l'importance d'un test
[Pour les débutants en programmation] Qu'est-ce qu'une méthode?
Quelle est la méthode principale en Java?
Quelle est la structure des données d'ActionText?
Qu'est-ce que Cubby
Qu'est-ce qui est nul? ]
Qu'est-ce que 'java
Qu'est-ce que Keycloak
Qu'est-ce que maven?
Qu'est-ce que Jackson?
Qu'est-ce que soi
Qu'est-ce que Jenkins
Qu'est-ce que IM-Juggling?
Qu'est-ce que les paramètres
Qu'est-ce que la façade? ??
Qu'est-ce que Java <>?
Qu'est-ce que Gradle?
Qu'est-ce que POJO
Qu'est-ce que 'java
Qu'est-ce que centOS
Qu'est-ce que RubyGem?
Qu'est-ce que before_action?
Qu'est-ce que Docker
Qu'est-ce que Byte?
Qu'est-ce que Tomcat
Qu'est-ce que JSP? ~ Connaissons les bases de JSP !! ~
Qu'est-ce que l'assemblage Maven?
Vérifiez l'existence de has_many et appartient_to-optional: Qu'est-ce qui est vrai?
Qu'est-ce que `docker-compose up`?
Qu'est-ce que vue cli
Qu'est-ce qu'une interface
Qu'est-ce que le moi de Ruby?
Qu'est-ce que l'attr_accessor de Ruby?
Qu'est-ce que l'encapsulation Java?
Qu'est-ce qu'une permission refusée?
Qu'est-ce que le contrôle d'instance?
Qu'est-ce qu'un initialiseur?
Qu'est-ce que Spring Tools 4
Qu'est-ce qu'un opérateur?
Qu'est-ce que le @VisibleForTesting de Guava?
définition de la méthode ruby
Qu'est-ce qu'un modèle MVC?
Qu'est-ce qu'une annotation?
Qu'est-ce que la technologie Java?
Qu'est-ce que Java API-java
Qu'est-ce que l'artefact de Gradle?
Qu'est-ce que l'audit JPA?
[Java] Qu'est-ce que flatMap?
Qu'est-ce qu'un servlet?