[Ruby] Penser quand il n'y a pas de récepteur devant la méthode (ça ressemble à)

Contexte:

Le récepteur est A dans la méthode A. (B). Il peut apparaître qu'il n'y a pas de récepteur devant la méthode. Par exemple, dans les cas suivants.

class ClassA
  def say
    puts instance_of? String #false
    puts instance_of? ClassA #true
  end
end
ClassA.new.say
#false
#true

exemple de? [Ruby] Différence entre is_a? Et instance_of? Comme je l'ai écrit dans l'explication de

A.instance_of? B 

À un moment donné, A est une instance de B, mais dans l'exemple ci-dessus, «A.» est manquant, n'est-ce pas?

Façon de penser

En conclusion, l'instance_of? Ci-dessus est précédée d'une instance de classe A. Lorsque vous faites référence à une méthode de la même classe, classe d'héritage ou module inclus, il n'est pas nécessaire de faire précéder la méthode d'une instance (pensez qu'elle est automatiquement attachée). Addendum: J'ai reçu un commentaire disant qu '"il existe une règle selon laquelle self est le récepteur des appels de méthode qui n'écrivent pas explicitement le récepteur", mais je pense que cette façon de penser est plus facile à comprendre.

Par exemple, dans les cas suivants,

class ClassB
  def say_b
    say_b2
  end
  def say_b2
    puts "bbb"
  end
end
ClassB.new.say_b
# bbb

Cela ne semble pas étrange, non? Les méthodes de la même classe peuvent être exécutées à partir d'autres méthodes sans écrire (ou ne pas écrire) de récepteur. De même, la méthode instance_of? Ci-dessus est en fait une méthode de la classe Object de la superclasse (à proprement parler, elle semble être une méthode du module Kernel inclus dans la classe Object).

ClassA.new.method(:instance_of?).owner
=> Kernel

Cause du malaise

Peut-être que la raison pour laquelle je me suis senti mal à l'aise lorsque la première instance_of?

Méthode de confirmation

Vous pouvez également vérifier le récepteur.

method(:Méthode).receiver

Vous pouvez sortir avec.

class ClassB
  def say_b
    say_b2
    puts method(:say_b2).receiver
  end
  def say_b2
    puts "bbb"
  end
end
ClassB.new.say_b
# bbb
# #<ClassB:0x00007ff34d8a0550>

Vous pouvez voir que le récepteur de say_b2 est une instance de ClassB. En fait, il existe déjà une instance de la méthode ClassB before (: say_b2).

Recommended Posts

[Ruby] Penser quand il n'y a pas de récepteur devant la méthode (ça ressemble à)
[Java] Est-il inutile de vérifier "l'identité" dans l'implémentation de la méthode equals ()?
Mémo de méthode d'acquisition de données lorsqu'il y a HashMap dans HashMap
[Ruby] Prenez l'habitude d'utiliser la méthode dup lors de la copie d'une variable chaîne
Lorsqu'il n'y a pas de sortie vers stdout dans le journal du docker
Lancer une exception et attraper lorsqu'il n'y a pas de gestionnaire correspondant au chemin au printemps
Fonction similaire La partie bloquée pour la rendre asynchrone
Comment afficher la valeur lorsqu'il y a un tableau dans le tableau
Lorsque j'édite le fichier de propriétés, il ressemble à des caractères déformés
Qu'est-ce que @Override ou @SuppressWarnings ("SleepWhileInLoop") devant la fonction? ?? ??
Méthode d'enquête lorsque le processeur du serveur exécutant java est lourd
Qu'Est-ce que c'est? ~ 3 types de "non" ~
Erreur lors de la finalisation du membre de la classe Entity utilisé dans SpringWebFlux
Valeur initiale lorsqu'il n'y a pas de propriété de l'objet de formulaire dans la requête Spring
[Swift] Au contraire, il est significatif d'éviter var et de le déclarer avec let uniquement lorsqu'il y a une branche dans l'affectation de la valeur initiale.
Quelle est la méthode principale en Java?
Lors de la réaffectation à un argument dans une méthode Ruby puis en appelant `super` → Celui réaffecté est utilisé
Nommer et appeler explicitement des méthodes de classe parent dans Ruby
Est-il courant de ne pas écrire la balise de fermeture de la balise <P> dans Javadoc?
La cause n'est pas visible lors de l'appel de méthodes d'autres classes en java
[Java] Lors de la mise d'une chaîne de caractères dans le cas de l'instruction switch, il est nécessaire d'en faire une expression constante
[Order method] Définit l'ordre des données dans Rails
[Java] Gestion des Java Beans dans la chaîne de méthodes
Comportement lorsque le caractère générique (**) est spécifié dans ruby
La version ruby est gérée dans le fichier .rbenv / version
Lorsque le projet n'est pas affiché dans eclipse