La méthode super en Ruby - partie 2
Comme me le faisait remarquer ce matin un lecteur, il manque un cas à
mon article d’hier sur l’utilisation de super
en Ruby. C’est d’autant
plus impardonnable que c’est un cas où, pour une fois, les parenthèses
sont obligatoires à la fin d’une méthode.
Voici donc une classe de base et une classe fille:
class Base
def foo
puts "Base#foo"
end
end
class Child < Base
def foo(bar)
super
puts "Child#foo with #{bar}"
end
end
Et maintenant on essaye le tout:
child = Child.new
child.foo
#=> ArgumentError: wrong number of arguments (0 for 1)
Boum ! Comme on l’a vu hier, super
passe automatiquement tous les
paramètres de la méthode dans laquelle il est appelé vers la classe
de base. Et là, notre méthode foo
dans la classe de base est sans
argument.
Pour résoudre ce problème, on est obligé de mettre des parenthèses
à la suite de super
:
class Child < Base
def foo(bar)
super()
puts "Child#foo with #{bar}"
end
end
child = Child.new
child.foo('ok')
Base#foo
Child#foo with ok
Voilà, oubli réparé.
À demain.
/ / / / / / / / / /
« La méthode super en Ruby ---//---
Vim - Comment ouvrir la fenêtre courante dans un nouvel onglet »