Toutes les autres réponses sont bonnes, y compris la pointe de creuser à travers RubySpecs:
https://github.com/rubyspec/rubyspec/blob/master/core/module/include_spec.rb
https://github.com/rubyspec/rubyspec/blob/master/core/module/extend_object_spec.rb
Comme pour les cas d'utilisation:
Si vous comprennent module ReusableModule dans la classe ClassThatIncludes, les méthodes, les constantes, les classes, les submodules, et d'autres déclarations obtient référencés.
Si vous étendez la classe ClassThatExtends avec le module ReusableModule, les méthodes et les constantes obtient copié. Évidemment, si vous n'êtes pas prudent, vous pouvez perdre beaucoup de mémoire dynamique de la duplication des définitions.
Si vous utilisez ActiveSupport::Inquiétude, l' .inclus() fonctionnalité vous permet de réécrire l', y compris la classe directement. module ClassMethods à l'intérieur d'une Préoccupation obtient étendu (copié) dans l', y compris la classe.