Programmation d'apprentissage: Quelle est la différence entre inclure et étendre dans Ruby?


Réponse 1:
module Squeaky
  def squeak
    "eep!"
  fin
fin

«Inclure» les mélanges dans les méthodes d'instance d'un module dans le module / classe récepteur.

chose de classe
  inclure Squeaky
fin

Thing.new.squeak
# => "eep!"

«Étendre» les mélanges dans les méthodes d'instance d'un module dans l'objet récepteur.

thing = Object.new
thing.extend Squeaky
thing.squeak
# => "eep!"

Si vous utilisez la méthode «extend» dans le contexte d'une classe, les méthodes d'instance du module deviendront des «méthodes de classe» car elles sont mélangées dans la classe et non dans les instances de la classe.

classe OtherThing
  étendre Squeaky
fin

OtherThing.squeak
# => "eep!"
OtherThing.new.squeak
# => NoMethodError (méthode non définie `squeak ')