Réimprimé à partir de Article de blog.
Vous pouvez utiliser super
pour appeler une méthode parent avec le même nom que lui-même.
def value
"Super#value"
end
end
class Sub < Super
def value
# Super#Valeur d'appel
super
end
end
p Sub.new.value
# => "Super#value"
Alors que faire si vous voulez appeler une méthode parent arbitraire à partir d'une méthode différente?
class Super
def value
"Super#value"
end
end
class Sub < Super
def value
"Sub#value"
end
def value2
#Ici Super#Je veux appeler la valeur
end
end
Method # super_method
Dans ce cas, vous pouvez utiliser Method # super_method
.
Obtenez n'importe quel objet méthode comme suit et utilisez # super_method
pour obtenir l'objet méthode parent.
class Super
def value
"Super#value"
end
end
class Sub < Super
def value
"Sub#value"
end
def value2
#Obtient l'objet de méthode de valeur et référence sa méthode parente
method(:value).super_method.call
end
end
p Sub.new.value2
# => "Super#value"
Vous pouvez également utiliser .instance_method
pour appeler une méthode de n'importe quelle classe comme indiqué ci-dessous.
class Super
def value
"Super#value"
end
end
class Sub < Super
def value
"Sub#value"
end
def value2
Super.instance_method(:value).bind(self).call
end
end
p Sub.new.value2
# => "Super#value"
Recommended Posts