Lors de la réaffectation à un argument dans une méthode Ruby puis en appelant `super` → Celui réaffecté est utilisé

[^ assign]: Si vous utilisez simplement une méthode destructive au lieu d'une affectation, les objets d'origine et les nouveaux objets sont les mêmes, donc cette question est hors de question.

Je n'ai pas compris, alors j'ai tenté une expérience.

class Foo
	def mtd(str)
		puts "[Foo:1] str => %p (%#08x)" % [str, str.__id__]
	end
end

class Bar < Foo
	def mtd(str)
		puts "[Bar:1] str => %p (%#08x)" % [str, str.__id__]
		str *= 2
		puts "[Bar:2] str => %p (%#08x)" % [str, str.__id__]
		super
	end
end

Bar.new.mtd("abc")

résultat


[Bar:1] str => "abc" (0x00003c)       <--L'objet d'origine passé à l'argument formel
[Bar:2] str => "abcabc" (0x000050)    <--Objet écrasé par réaffectation (ID différent)
[Foo:1] str => "abcabc" (0x000050)    <--Résultat: le remplacement est utilisé

Si vous n'écrivez que «super», cela complète le sentiment de «super (str)», et par conséquent, il est préférable de réaffecter.

Juste au cas où, quand j'ai regardé le manuel de référence, il a été écrit fermement en ** Sample Code ** .. (C'est difficile car cela peut être interprété comme l'une ou l'autre des explications dans les phrases)

Recommended Posts

Lors de la réaffectation à un argument dans une méthode Ruby puis en appelant `super` → Celui réaffecté est utilisé
Comment afficher la valeur lorsqu'il y a un tableau dans le tableau
Lancer une exception et attraper lorsqu'il n'y a pas de gestionnaire correspondant au chemin au printemps
Je veux passer l'argument d'Annotation et l'argument de la méthode d'appel à aspect
Comment référencer une colonne lors du remplacement de la méthode de nom de colonne dans ActiveRecord
[Rubiy] Je veux créer un tableau à partir d'une chaîne de caractères avec la méthode split. Et vice versa.
Comment vérifier si une variable d'instance est définie dans une classe Ruby
La cause n'est pas visible lors de l'appel de méthodes d'autres classes en java
Comment se moquer d'un appel de super méthode dans PowerMock
Comment effectuer un processus spécifique lorsque le bouton de retour est enfoncé dans le fragment Android
[Ruby] Prenez l'habitude d'utiliser la méthode dup lors de la copie d'une variable chaîne
Comment spécifier un tableau pour la valeur de retour / l'argument d'une méthode dans le fichier IDL CORBA
Comment résoudre le problème lorsque la valeur n'est pas envoyée lorsque le formulaire est désactivé dans les rails et envoyé
[Rails] Que faire lorsque la vue se réduit lorsqu'un message est affiché avec la méthode des erreurs
Java learning_Behavior lorsqu'il y a un champ avec le même nom et une méthode avec le même nom dans deux classes dans une relation d'héritage
[Ruby] Comptez un nombre pair dans un tableau en utilisant la méthode pair?
Comment changer une chaîne dans un tableau en un nombre dans Ruby
Je veux appeler une méthode et compter le nombre
Comment récupérer la valeur de hachage dans un tableau dans Ruby
Créer une méthode pour renvoyer le taux de taxe en Java
Quelle est la différence entre une action et une méthode d'instance?
Patch Monkey pour renvoyer l'heure actuelle lorsqu'une chaîne vide est spécifiée dans Time.parse de Ruby
À propos de la méthode de conversion d'une chaîne de caractères en entier / fraction (données de conversion) en Java
Paramètres à effectuer lorsque HTML ou JSP est formaté dans Eclipse et que la mise en page devient décevante
[Java] Comment rechercher des valeurs dans un tableau (ou une liste) avec la méthode contains
Si vous souhaitez simuler une méthode dans RSpec, vous devez utiliser la méthode allow pour mock et la méthode singleton.
Emplacement de la définition de la méthode Résumé de la vérification Lorsque défini dans le projet et Rails / Gem
Que faire lorsque javax.el.ELException: Pas une expression de méthode valide: s'affiche lorsque l'écran JSF est affiché
Que faire si une exception UnsupportedCharsetException se produit dans un JRE léger
[Ruby] Relation entre la classe parent et la classe enfant. Relation entre classe et instance.
[Ruby] A Hash # has_key? Faire un pas de plus vers la version officielle obsolète?
[jOOQ] Comment utiliser CASE WHEN dans la clause WHERE / AND / OR
Comment installer le langage utilisé dans Ubuntu et comment créer l'environnement
Comment stocker les informations saisies dans la zone de texte dans une variable de la méthode
Points à retenir et concepts dans le didacticiel Ruby on Rails
Facile à comprendre la différence entre la méthode d'instance Ruby et la méthode de classe.
Créer une ArrayList qui vous permet de lancer et de récupérer les coordonnées d'un plan bidimensionnel
Résolution d'une erreur survenue lors de la tentative d'utilisation de Spark dans un environnement où Java 8 et Java 11 coexistent
[Ruby On Rails] Mesures d'urgence lorsque redirect_to action :: show ne peut pas être (ne peut pas être utilisé) dans l'action de création et de destruction
Comment faire fonctionner IGV en utilisant la communication par socket, et l'histoire de la création d'un Ruby Gem en utilisant cette méthode
Que faire si l'opération non autorisée s'affiche lors de l'exécution d'une commande dans le terminal
[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.