2
Existe-t-il un moyen de savoir si une méthode a été surchargée par une sous-classe par programmation? Quelque chose qui fonctionne comme ceci:Comment puis-je voir où une méthode a été définie dans la hiérarchie de classes et écrasée dans Ruby?
class BaseModel
def create
puts "superclass"
end
end
class SomeModel < BaseModel
def create
puts "subclass"
end
end
puts SomeModel.overridden_instance_methods #=> [:create]
Des idées?
pas du tout, c'est super malade. Merci! –
BTW: si vous ne connaissez pas au préalable la superclasse directe de 'SomeModel', vous pouvez utiliser' SomeModel.superclass' au lieu de 'BaseModel'. De cette façon, vous pouvez intégrer cette fonctionnalité dans une méthode réutilisable. Quelque chose comme 'Class Class; def overriden_methods; instance_methods (false) & superclass.instance_methods end end' Et ensuite: 'SomeModel.overriden_methods' –
Sachez, cependant, que ceci n'attrapera pas les cas où SomeModel mélangeait un module qui définissait create(). Cette expression ne vous donnera que les méthodes que SomeModel a directement remplacées. –