Question Quelle est la différence entre include et require dans Ruby?


Ma question est similaire à "Quelle est la différence entre include et extend dans Ruby?".

Quelle est la différence entre require et include dans Ruby? Si je veux juste utiliser les méthodes d'un module de ma classe, devrais-je require ou include il?


418
2017-11-25 17:12


origine


Réponses:


Quelle est la différence entre   "include" et "require" dans Ruby?

Répondre:

Les méthodes include et require font   choses très différentes.

La méthode require fait ce qui inclut   fait dans la plupart des autres programmes   languages: exécute un autre fichier. Ça aussi   suit ce que vous avez demandé dans le   passé et ne nécessitera pas le même fichier   deux fois. Pour exécuter un autre fichier sans   cette fonctionnalité ajoutée, vous pouvez utiliser   la méthode de chargement

La méthode d'inclusion prend toutes les   méthodes d'un autre module et   les inclut dans le module actuel.   Ceci est une chose au niveau de la langue comme   opposé à une chose de niveau fichier comme avec   exiger. La méthode d'inclusion est la   moyen principal pour "étendre" les classes avec   d'autres modules (généralement appelés   mix-ins). Par exemple, si votre classe   définit la méthode "chacun", vous pouvez   inclure le module mixin Enumerable   et il peut agir comme une collection. Ce   peut être déroutant comme le verbe inclure   est utilisé très différemment dans d'autres   langues.

La source

Donc, si vous voulez simplement utiliser un module plutôt que de l'étendre ou de faire un mix-in, alors vous voudrez utiliser require.

Assez curieusement, Ruby's require est analogue à C include, tandis que Ruby include est presque rien comme C include.


495
2017-11-25 17:19



Du livre Ruby Metaprogramming,

le require() la méthode est assez similaire à load()mais c'est fait pour   un but différent. Tu utilises load() pour exécuter du code, et vous utilisez    require() importer des bibliothèques.


87
2018-05-21 15:44



Si vous utilisez un module, cela signifie que vous introduisez toutes les méthodes dans votre classe.    Si vous extend une classe avec un module, ce qui signifie que vous «introduisez» les méthodes du module classe méthodes    Si vous include une classe avec un module, ce qui signifie que vous «introduisez» les méthodes du module exemple méthodes

EX:

 module A
   def say
     puts "this is module A"
   end
 end

 class B
   include A
 end

 class C
   extend A
 end

B.say => méthode indéfinie 'dire' pour B: classe

B.new.say => c'est le module A

C.say => c'est le module A

C.new.say => méthode non définie 'say' pour C: Class


79
2018-01-08 09:38



  • Rubis require est plus comme "inclure" dans d'autres langues (comme C). Il dit à Ruby que vous voulez apporter le contenu d'un autre fichier. Des mécanismes similaires dans d'autres langues sont:

  • Rubis includeest un mécanisme d'héritage orienté objet utilisé pour les mixins.

Il y a une bonne explication ici:

[La] réponse simple est que require et include sont essentiellement indépendants.

"exiger" est similaire à l'include C, ce qui peut provoquer une confusion chez les débutants.   (Une différence notable est que les locaux dans le fichier requis "s'évaporer"   quand le besoin est fait.)

Le rubis comprendre est rien comme le C inclure. L'instruction include "intègre" un module dans une classe. C'est un forme limitée   de l'héritage multiple. Un module inclus donne littéralement un "est-un"   relation sur la chose l'incluant.

Emphasis ajouté.


53
2017-11-25 17:21



Avez-vous déjà essayé de require un module? Quels ont été les résultats? Essayez juste:

MyModule = Module.new
require MyModule # see what happens

Les modules ne peuvent pas être requis, seulement inclus!


7
2018-06-12 03:29



De Programmation Ruby 1.9

Nous allons faire quelques remarques sur la déclaration d'inclusion avant de continuer. Premièrement, il a   Rien à voir avec les fichiers. Les programmeurs C utilisent une directive de préprocesseur appelée #include   insère le contenu d'un fichier dans un autre pendant la compilation. La déclaration Ruby include   fait simplement référence à un module. Si ce module est dans un fichier séparé, vous devez utiliser   require (ou son cousin moins utilisé, load) pour faire glisser ce fichier avant d'utiliser include.   Deuxièmement, une inclusion Ruby ne copie pas simplement les méthodes d'instance du module dans la classe.   Au lieu de cela, il fait une référence de la classe au module inclus. Si plusieurs classes   inclure ce module, ils vont tous pointer vers la même chose. Si vous modifiez la définition d'un   méthode dans un module, même pendant que votre programme est en cours d'exécution, toutes les classes qui comprennent   module présentera le nouveau comportement.


6
2017-08-25 01:48



Comprendre 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 que vous l'insériez dans la classe, où vous l'incluez. Cela permet le comportement 'mixin'. Il est utilisé pour sécher votre code pour éviter la duplication, par exemple, s'il y avait plusieurs classes qui auraient besoin du même code dans le module.

Charge La méthode load est presque identique à la méthode require, sauf qu'elle ne permet pas de savoir si cette bibliothèque a été chargée ou non. Il est donc possible de charger une bibliothèque plusieurs fois et, lors de l'utilisation de la méthode load, vous devez spécifier l'extension ".rb" du nom de fichier de la bibliothèque.

Exiger La méthode require vous permet de charger une bibliothèque et d'empêcher son chargement plusieurs fois. La méthode require renverra '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 distinct, 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/


2
2017-11-27 10:16