• # 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.