super
sans arguments, vous recevrez les mêmes arguments que la méthode actuelle."[^ 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)