Rasgos vs. mixins
-
06-09-2019 - |
Pregunta
¿Cuál es la diferencia entre Mixins y rasgos?
Según Wikipedia , Ruby módulos son algo así como los rasgos. ¿Cómo es eso?
Solución
- Mixins puede contener estado, rasgos (tradicionales) no lo hacen.
- Mixins utilizar "la resolución de conflictos implícita", rasgos utilizan "la resolución de conflictos explícita"
- Mixins depende de linealización, rasgos son aplanadas.
ad 1. En mixins puede definir variables de instancia. Rasgos no permiten esto. El estado debe ser proporcionado por la composición de la clase (= clase usando los rasgos)
ad 2.
Puede ser el nombre de conflicto. Dos mixins (MA
y MB
) o rasgos (TA
y TB
) definen método con el mismo foo():void
definición.
Mixin MA {
foo():void {
print 'hello'
}
}
Mixin MB {
foo():void {
print 'bye'
}
}
Trait TA {
foo():void {
print 'hello'
}
}
Trait TB {
foo():void {
print 'bye'
}
}
En mixins los conflictos en la composición de C mixins MA, MB
clase se resuelven de manera implícita.
Class C mixins MA, MB {
bar():void {
foo();
}
}
Para ello, será foo():void
de MA
Por otro lado durante el uso de rasgos, la composición de clase ha de resolver los conflictos.
Class C mixins TA, TB {
bar():void {
foo();
}
}
Este código elevará conflicto (dos definiciones de foo():void
).
ad 3. La semántica de un método no depende de si se define en un rasgo o en una clase que utiliza el rasgo.
En otras palabras, no importa si la función de clase consta de los rasgos o el código Rasgos es "copiar - pegar". En la clase
Otros consejos
Estas páginas explican la diferencia en el lenguaje de programación D.
Mixins en este contexto son el código generado sobre la marcha, y luego se inserta en ese punto de código durante la compilación. Bastante útil para DSL simples.
Los rasgos son valores externos en tiempo de compilación (en lugar de código generada a partir de una fuente externa). La diferencia es sutil. Mixins añadir lógica, los rasgos de añadir datos tales como información de tipo de tiempo de compilación.
No se sabe mucho acerca de Ruby, pero espero que esto ayude un poco.