323 votos

¿Cuál es la diferencia entre incluir y exigir en Ruby?

Mi pregunta es similar a "¿Cuál es la diferencia entre include y extend en Ruby?".

¿Cuál es la diferencia entre los require y include en Ruby? Si sólo desea utilizar los métodos de un módulo en mi clase, debo require o include ?

395voto

HanClinto Puntos 5925

A partir de aquí:

¿Cuál es la diferencia entre "incluir" y "exigir" en Ruby?

Respuesta:

El incluir y que requieren de métodos de hacer cosas muy diferentes.

El requerir método que no lo incluyen en la mayoría de los otros de programación idiomas: ejecutar otro archivo. También pistas de lo que has requerido en la pasado y no requieren el mismo archivo dos veces. Para ejecutar otro archivo sin esta funcionalidad adicional, se puede utilizar el método de carga.

El incluir el método de toma de todas las métodos de otro módulo y incluye en el módulo actual. Este es un nivel de lenguaje como la cosa se opuso a nivel de archivos como la cosa con requieren. El método include es el principal forma de "ampliar" las clases con otros módulos (por lo general referido como mix-ins). Por ejemplo, si su clase define el método de "cada uno", puede incluir el mixin módulo Enumerable y puede actuar como una colección. Este puede ser confuso como el verbo incluir se utiliza de forma muy diferente en otros idiomas.

Así que si usted sólo desea utilizar un módulo, en lugar de ampliar o hacer una mezcla, a continuación, usted querrá usar require.

Curiosamente, Ruby require es similar a C, include, mientras que la de Ruby include es casi nada como C, include.

71voto

Pratik Khadloya Puntos 3481

A partir de la Metaprogramación Ruby libro,

La require() método es bastante similar a load(), pero es para un propósito diferente. Utilice load() de ejecutar el código y utilizar require() a la importación de bibliotecas.

48voto

Peter Dang Puntos 277

Si está utilizando un módulo, que significa que usted está trayendo a todos los métodos a los de su clase. Si extend de una clase con un módulo, lo que significa que está "trayendo" del módulo métodos como la clase demétodos. Si include de una clase con un módulo, lo que significa que está "trayendo" del módulo métodos como ejemplo de los métodos.

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 'la opinión' para B:Clase

B.new.say => este es Un módulo de

C.say => este es Un módulo de

C.new.say => undefined method 'la opinión' para C:la Clase

45voto

bradheintz Puntos 2484
  • Ruby require es más como "incluir" en otros lenguajes (como C). Le dice a Ruby que desea llevar en el contenido de otro archivo. Mecanismos similares en otros idiomas:

  • Ruby includees un orientada a objetos herencia mecanismo utilizado para mixins.

Hay una buena explicación aquí:

[La] respuesta simple es que requieren y son esencialmente ajenos.

"exigir"que es similar a la de C, que puede causar novato confusión. (Una diferencia notable es que los locales en el interior del archivo requerido "evaporan" cuando la requieren.)

El Rubí se incluyen se parece en nada a la C incluyen. La instrucción include "mezclas" de un módulo en una clase. Es una forma limitada de la herencia múltiple. Un módulo literalmente concede una "es-un" relación a la cosa que se incluye.

Énfasis añadido.

5voto

Boris Stitnicky Puntos 5409

¿Alguna vez has intentado require un módulo? ¿Cuáles fueron los resultados? Sólo trate de:

MyModule = Module.new
require MyModule # see what happens

Los módulos no pueden ser obligados, sólo incluido!

Iteramos.com

Iteramos es una comunidad de desarrolladores que busca expandir el conocimiento de la programación mas allá del inglés.
Tenemos una gran cantidad de contenido, y también puedes hacer tus propias preguntas o resolver las de los demás.

Powered by: