2012-06-11 17 views
5

He leído en muchos libros de texto que¿Los módulos == mixins en ruby?

En Ruby, una clase solo puede ser una subclase de una clase. Mixins, sin embargo, permite clases sin un ancestro común para compartir métodos.

En la práctica, cada vez que necesito implementar una herencia múltiple. Tengo uso Modules & no mixins. por ejemplo:

Module name_goes_here 
    def method_name_goes_here 
    ..... 
    end 
end 

Entonces, acabo de ellos incluyen en una clase

class MySubClass < MySuperClass 
    include module_name 
end 

ahora, me he referido a varios libros de rubí cada uno hablando de mixins & Entonces, de repente, todos empiezan a hablar de módulos sin dejar en claro cuál es la relación de los módulos mixins &.

entonces, pregunta es: ¿Los módulos == mixins en ruby? si es así, entonces por qué. si no, ¿cuál es la diferencia?

PD: Lo siento, si es una pregunta tonta

Respuesta

13

Mixins es un concepto de lenguaje que permite inyectar un código en una clase.

Esto se implementa en Ruby por la palabra clave include que toma un Module como parámetro.

Así que sí, en Ruby, mixins se implementan con módulos. Pero los módulos tienen otros usos que mixins.

Por ejemplo, los módulos también se pueden usar para el espaciado de nombres de las clases o para encapsular funciones de utilidad para evitar contaminar el espacio de nombres global.

+0

Aparte de mixins, ¿cuáles son los "otros usos" de los módulos en ruby? – CuriousMind

+0

@Gaurish Se pueden usar para el espaciado de nombres o para encapsular métodos que no pertenecen a una clase para evitar contaminar el espacio de nombres global. –

+0

@AndrewMarshall Gracias, agregué tu contribución en la respuesta –

5

De wikipedia article

En los lenguajes de programación orientados a objetos, un mixin es una clase que proporciona una cierta funcionalidad para ser heredada o simplemente volver a utilizar por una subclase, aunque no está destinado a creación de instancias (la generación de objetos de esa clase).

Así que sí, los módulos en Ruby proporcionan una forma de reutilizar la funcionalidad sin crear instancias de los módulos. Yo diría que "mixins en ruby ​​se implementan con módulos", pero no "mixins son módulos y viceversa".