Ma question est similaire à " Quelle est la différence entre inclure et étendre dans Ruby? ".
Quelle est la différence entre Ruby require
et include
Ruby? Si je veux simplement utiliser les méthodes d'un module de ma classe, dois-je le require
faire ou le include
faire?
require
etinclude
, et aussi pertinents,Module#append_features
.Réponses:
La source
Donc, si vous voulez simplement utiliser un module, plutôt que de l'étendre ou de faire un mixage, alors vous voudrez l'utiliser
require
.Curieusement, Ruby
require
est analogue à C deinclude
, alors que Rubyinclude
est presque rien comme C deinclude
.la source
include
dans Ruby, c'est simplement l'héritage.class C; include M end
faitM
la superclasse deC
et la (ancienne) superclasse deC
la superclasse deM
. Je ne pense pas que Cinclude
fonctionne via l'héritage, je pense que c'est une simple substitution textuelle / lexicale.Si vous utilisez un module, cela signifie que vous apportez toutes les méthodes dans votre classe. Si vous
extend
une classe avec un module, cela signifie que vous "apportez" les méthodes du module en tant que méthodes de classe . Si vousinclude
une classe avec un module, cela signifie que vous "apportez" les méthodes du module en tant que méthodes d' instance .EX:
B.say
=> méthode non définie 'say' pour B: ClassB.new.say
=> c'est le module AC.say
=> c'est le module AC.new.say
=> méthode non définie 'say' pour C: Classla source
require
etinclude
sont.Du livre Metaprogramming Ruby,
la source
Ruby
require
ressemble plus à «inclure» dans d'autres langages (comme C). Il indique à Ruby que vous souhaitez importer le contenu d'un autre fichier . Des mécanismes similaires dans d'autres langues sont:using <namespace>
directive en C # .import <package>
en Java .Ruby
include
est un mécanisme d'héritage orienté objet utilisé pour les mixins .Il y a une bonne explication ici :
Je souligne.
la source
Avez-vous déjà essayé
require
un module? Quels ont été les résultats? Essayez simplement:Les modules ne peuvent pas être requis, seulement inclus!
la source
TypeError
) si le motModule
est changé enClass
.De la programmation de Ruby 1.9
la source
Inclure Lorsque vous incluez un module dans votre classe comme indiqué ci-dessous, c'est comme si vous preniez le code défini dans le module et l'insérez dans la classe, où vous l'incluez. Il permet le comportement «mixin». Il est utilisé pour SECHER votre code pour éviter la duplication, par exemple, s'il y avait plusieurs classes qui auraient besoin du même code dans le module.
Charger La méthode de chargement est presque comme la méthode require, sauf qu'elle ne garde pas la trace du chargement ou non de cette bibliothèque. Il est donc possible de charger une bibliothèque plusieurs fois et également lorsque vous utilisez la méthode de chargement, vous devez spécifier l'extension «.rb» du nom du fichier de bibliothèque.
Require La méthode require vous permet de charger une bibliothèque et l'empêche d'être chargée plus d'une fois. La méthode require retournera 'false' si vous essayez de charger la même bibliothèque après la première fois. La méthode require ne doit être utilisée que si la bibliothèque que vous chargez est définie dans un fichier séparé, ce qui est généralement le cas.
Vous pouvez préférer ceci http://ionrails.com/2009/09/19/ruby_require-vs-load-vs-include-vs-extend/
la source
Voici quelques différences de base entre exiger et inclure:
Exiger:
Comprendre:
la source
Il retournera bolean true / false
Le nom qui est passé en paramètre à require, ruby essaiera de trouver le fichier source avec ce nom dans votre chemin de chargement. La méthode require retournera 'false' si vous essayez de charger la même bibliothèque après la première fois. La méthode require ne doit être utilisée que si la bibliothèque que vous chargez est définie dans un fichier séparé. Il garde donc la trace du fait que cette bibliothèque a déjà été chargée ou non.
Supposons que vous ayez des méthodes à avoir dans deux classes différentes. Ensuite, vous n'avez pas à les écrire dans les deux classes. Au lieu de cela, vous pouvez le définir dans le module. Et puis inclure ce module dans d'autres classes. Il est fourni par Ruby juste pour assurer le principe DRY. Il est utilisé pour sécher votre code pour éviter la duplication
la source
Comprendre
Exiger
Il garde donc la trace du fait que cette bibliothèque a déjà été chargée ou non. Vous n'avez pas non plus besoin de spécifier l'extension «.rb» du nom du fichier de bibliothèque. Voici un exemple d'utilisation de require. Placez la méthode require tout en haut de votre fichier «.rb»:
Charge
Étendre
la source
'Charger' - insère le contenu d'un fichier (analyser le fichier à chaque appel du fichier)
'Require' - insère un fichier analysé le contenu (fichier analysé une fois et stocké en mémoire)
'Inclure' - inclut le module dans la classe et peut utiliser des méthodes à l'intérieur du module comme méthode d'instance de la classe
«Étendre» - inclut le module dans la classe et peut utiliser des méthodes à l'intérieur du module comme méthode de classe
la source