[Ruby] Que se passe-t-il si le self de la méthode est utilisé comme valeur de retour?

Vous pourrez vous reconnecter et utiliser la même méthode.

Exemple pratique

class Hoge
  def foo
     self
  end
end

Hoge.new.foo
#<Hoge:0x00007f92612b2e38>

Hoge.new.foo.foo.foo.foo
#<Hoge:0x00007f92618c82a0>

De cette manière, puisque la valeur de retour est du même type, il est possible d'utiliser à nouveau la même méthode.

Commentaire

a.method b

Dans cette situation, la valeur de retour sera le récepteur a. Donc

c = a.method b

Ensuite, le même type que a est émis vers c.

Exemple d'application

Contient des variables d'instance et compte le nombre de fois qu'une méthode est appelée.

class Hoge
  def foo
     @a.nil? ? @a = 1 : @a = @a + 1 
     self
  end
end

Hoge.new.foo
=> #<Hoge:0x00007f92618c2080 @a=1>

Hoge.new.foo.foo.foo.foo
=> #<Hoge:0x00007f92618a0a98 @a=4>

Ensuite, vous pouvez voir que la valeur de @a est incrémentée du nombre de fois que la méthode foo est appelée.

Recommended Posts

[Ruby] Que se passe-t-il si le self de la méthode est utilisé comme valeur de retour?
Quelle est la méthode pluck?
[Ruby] À quoi sert «!!»?
Quelle est la méthode d'initialisation?
Quelle est la méthode principale en Java?
Les méthodes Ruby renvoient la dernière valeur évaluée
[Java] Cela peut être heureux si la valeur de retour de la méthode qui retourne null est facultative <>
Qu'est-ce que soi
Passez un argument à la méthode et recevez le résultat de l'opération comme valeur de retour
Qu'est-ce que le moi de Ruby?
Quelle est la différence entre une action et une méthode d'instance?
9 Correspond à la valeur de retour
Qu'est-ce qu'un module Ruby?
Qu'est-ce que la classe BufferedReader?
[Ruby] Qu'est-ce qu'une instance?
A quoi sert le constructeur?
[Ubuntu 20.04] Que faire si le moniteur externe n'est pas reconnu
Vous voulez savoir ce que Ruby n est la puissance de 2? (Jugement de puissance de 2)
Que faire lorsque Cloud 9 est plein dans le didacticiel Rails
Remarques sur la marche à suivre si le Jar de dépendance Eclipse Maven est incorrect