520 votes

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

Ma question est similaire à " Quelle est la différence entre inclure et étendre 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 it ou include it?

582voto

HanClinto Points 5925

À partir d' ici:

Quelle est la différence entre "comprendre" et de "besoin" en Ruby?

Réponse:

La comprennent et nécessitent des méthodes de des choses très différentes.

La méthode ne nécessite que comprennent dans la plupart des autres émissions langues: exécuter un autre fichier. Il a également les pistes de ce que vous avez tenus dans l' passé et n'exigent pas le même fichier à deux reprises. Pour exécuter un autre fichier sans cette nouvelle fonctionnalité, vous pouvez utiliser la méthode load.

La méthode include prend toutes les méthodes à partir d'un autre module et les inclut dans le module en cours. C'est un langage de niveau chose comme contrairement à un niveau fichier, chose qu'avec les exiger. La méthode include est l' principal moyen pour "étendre" les classes avec d'autres modules (généralement appelé mix-ins). Par exemple, si votre classe définit la méthode de "chacun", vous pouvez inclure le mixin module Énumérable et il peut agir comme une collection. Cette peut être source de confusion que de l'inclure verbe est utilisé de manière très différente dans d'autres les langues.

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

Curieusement, Ruby require est analogue à C include, tandis que Ruby include est presque rien comme C include.

128voto

Peter Dang Points 277

Si vous utilisez un module, cela signifie que vous êtes en apportant toutes les méthodes dans votre classe. Si vous extend d'une classe avec un module, cela signifie que vous êtes "apportant" le module de méthodes de la classedes méthodes. Si vous include d'une classe avec un module, cela signifie que vous êtes "apportant" le module de méthodes d' instance 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 => undefined method 'dire' pour B:Classe

B.new.say => c'est Un module

C.say => c'est Un module

C.new.say => undefined method 'dire' pour C:Classe

103voto

Pratik Khadloya Points 3481

Du livre Metaprogramming Ruby,

La méthode require() est assez similaire à load() , mais elle est destinée à un usage différent. Vous utilisez load() pour exécuter du code et vous utilisez require() pour importer des bibliothèques.

65voto

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

  • Ruby includeest un héritage orienté objet mécanisme utilisé pour mixin.

Il y a une bonne explication ici:

[Le] réponse simple est que le besoin et sont essentiellement liés.

"exiger" est similaire à la C, ce qui peut causer newbie de la confusion. (Une différence notable est que les habitants de l'intérieur le fichier requis "s'évaporer" lorsque le besoin se fait.)

Le Rubis inclure n'en est rien, comme le C comprennent. L'instruction include "mélange" d'un module dans une classe. C'est une forme limitée de l'héritage multiple. Inclus un module littéralement confère un "est-un" relation sur la chose dont il.

L'emphase est ajoutée.

7voto

Boris Stitnicky Points 5409

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!

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X