prepend et résolution des méthodes
Chaînes d’ancêtres
prepend et résolution des méthodes est une leçon Ruby Academy gratuite sur CoddyKit. Ceci est la leçon 4 sur 4. Tu peux lire la leçon complète ci-dessous gratuitement — puis la pratiquer en direct dans le navigateur avec un éditeur de code intégré et un tuteur IA 24/7. Elle fait partie du parcours d'apprentissage Ruby Academy, et ta progression se synchronise sur le web et l'application CoddyKit. Le cours Ruby Academy comprend 4 leçons au total.
Chaînes d'ancêtres
Lorsque vous appelez une méthode, Ruby parcourt une liste appelée chaîne d'ancêtres. La première définition correspondante est retenue. Comprendre cette chaîne explique comment les modules de mélange et l'héritage interagissent.
class Animal; end
class Dog < Animal; end
p Dog.ancestorsOrdre de recherche des méthodes
Ruby cherche d'abord dans la classe de l'objet, puis dans ses modules inclus, ensuite dans sa classe parente, et continue ainsi le long de la chaîne jusqu'à trouver la méthode.
module M
def hello; "from module"; end
end
class C
include M
def hello; "from class"; end
end
puts C.new.helloinclude se place sous la classe
Un module inclus par include se place juste sous la classe dans la chaîne. Les propres méthodes de la classe sont prioritaires sur celles du module.
module M; end
class C
include M
end
p C.ancestors # [C, M, Object, ...]Découvrez la préinsertion
prepend insère un module au-dessus de la classe dans la chaîne. Les méthodes du module sont alors trouvées en premier, avant celles de la classe.
module M
def hello; "from module"; end
end
class C
prepend M
def hello; "from class"; end
end
puts C.new.helloLa préinsertion dans la chaîne
Examinez les ancêtres pour voir que prepend place le module avant la classe.
module M; end
class C
prepend M
end
p C.ancestors # [M, C, Object, ...]Atteindre la méthode d'origine depuis un module préinséré
Comme le module préinséré s'exécute en premier, il peut envelopper la méthode de la classe en appelant super pour atteindre l'originale. Cette technique est idéale pour décorer un comportement.
module Logged
def save
puts "before save"
result = super
puts "after save"
result
end
end
class Record
prepend Logged
def save
puts "saving record"
:ok
end
end
p Record.new.saveL'appel au parent dans les modules de mélange
super suit la chaîne d'ancêtres. Depuis un module inclus, super atteint la classe parente ; depuis un module préinséré, il atteint directement la classe.
module Polite
def greet; "Hi! " + super; end
end
class Person
prepend Polite
def greet; "I am here."; end
end
puts Person.new.greetEnvelopper sans modifier
prepend vous permet d'ajouter un comportement autour de méthodes existantes sans modifier le code de la classe d'origine : c'est une alternative claire à la modification dynamique de classes.
module Timing
def compute(n)
puts "start"
super
end
end
class Calc
prepend Timing
def compute(n); n * n; end
end
puts Calc.new.compute(5)Ordre de plusieurs modules
Lorsque plusieurs modules sont inclus, le dernier module inclus est le plus proche de la classe et est recherché en premier.
module A; def who; "A"; end; end
module B; def who; "B"; end; end
class C
include A
include B
end
puts C.new.who # B wins (included last)
p C.ancestorsRésumé : inclusion ou préinsertion
Comparaison :
include M: la chaîne est[Class, M, ...]— les méthodes de la classe sont prioritaires.prepend M: la chaîne est[M, Class, ...]— les méthodes du module sont prioritaires et peuvent appelersuperpour atteindre la classe.
module M; end
class Inc; include M; end
class Pre; prepend M; end
p Inc.ancestors
p Pre.ancestorsTout mettre en place
La résolution des méthodes suit la chaîne d'ancêtres :
- Les méthodes de la classe sont prioritaires sur les modules inclus.
- Les modules préinsérés sont prioritaires sur la classe.
superremonte d'un niveau dans la chaîne.
module Cap
def name; super.capitalize; end
end
class User
prepend Cap
def name; "ada"; end
end
puts User.new.nameVérification rapide
Évaluez votre compréhension de la résolution des méthodes.
Récapitulatif
Vous avez découvert la résolution des méthodes :
- Ruby parcourt la chaîne d'ancêtres de haut en bas.
includese place sous la classe ;prependse place au-dessus.superatteint la définition suivante dans la chaîne.prependpermet d'envelopper les méthodes proprement.
module Loud
def speak; super.upcase; end
end
class Bot
prepend Loud
def speak; "beep"; end
end
puts Bot.new.speakQuestions Fréquemment Posées
La leçon « prepend et résolution des méthodes » est-elle gratuite ?
Oui — le texte complet de « prepend et résolution des méthodes » est gratuit à lire ici sur le web. Pour la pratiquer de manière interactive (un éditeur de code intégré et un tuteur IA 24/7) et déverrouiller le reste du cours Ruby Academy, passe à CoddyKit PRO. Le cours Ruby Academy comprend 4 leçons au total.
Qu'est-ce que j'apprendrai dans « prepend et résolution des méthodes » ?
Chaînes d’ancêtres Tu pratiques Ruby Academy avec du code pratique que tu exécutes directement dans le navigateur, et un tuteur IA 24/7 répond à tes questions au fur et à mesure que tu avances dans la leçon.
Dois-je avoir de l'expérience pour commencer Ruby Academy ?
Aucune expérience préalable n'est requise. Ruby Academy sur CoddyKit est structuré pour les débutants jusqu'aux apprenants avancés, donc tu peux commencer ici ou depuis le début et avancer à ton rythme. Ceci est la leçon 4 sur 4.
Combien de temps prend la leçon « prepend et résolution des méthodes » ?
La plupart des leçons CoddyKit prennent environ 5–10 minutes. Chacune est courte et interactive, tu progresses régulièrement et tu repiques exactement où tu t'es arrêté sur le web et l'app.
Peux-tu écrire et exécuter du code dans cette leçon Ruby Academy ?
Oui. Chaque leçon Ruby Academy inclut un éditeur de code intégré, tu écris et exécutes du vrai code directement dans ton navigateur et tu reçois des retours IA instantanés — aucune configuration locale requise.
Toutes les leçons de ce cours
- Définir des modules
- include et extend
- Comparable et Enumerable
- prepend et résolution des méthodes