• # De mémoire ...

    Posté par . Évalué à 2.

    Est ce normal que la méthode initialize de Bar ne soit pas exécutée dans ce bout de code?
    Oui.

  • # Oui, c'est normal ;-)

    Posté par . Évalué à 1.

    inherited est appelé sur "class Bar < Foo", donc à l'instanciation de la class (sic), avant qu'elle soit définie :

    L = []
    def are_you_taking_to_me? prefix, subclass
     known = subclass.new.respond_to?(:bar_method)
     p "#{prefix} " +
     if known
     "Je connais TOUT"
     else 
     "Je ne connais RIEN encore" 
     end + 
     " de #{subclass}"
     known
    end
    class Foo
     def self.inherited(subclass)
     are_you_taking_to_me? "DANS inherited", subclass
     puts( 
     )
     L << subclass.new
     end
    end
    class Bar < Foo
     def initialize
     p "ok"
     end
     def bar_method
     p "bar method"
     end
    end
    are_you_taking_to_me? "APRÈS définition de Bar", Bar
    # => 
    # DANS inherited Je ne connais RIEN encore de Bar
    #
    # ok
    # APRÈS définition de Bar Je connais TOUT de Bar
    
    

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.