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?

¿Fue útil?

Solución

  1. Mixins puede contener estado, rasgos (tradicionales) no lo hacen.
  2. Mixins utilizar "la resolución de conflictos implícita", rasgos utilizan "la resolución de conflictos explícita"
  3. Mixins depende de linealización, rasgos son aplanadas.

Conferencia sobre los rasgos

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.

http://dlang.org/mixin.html

http://dlang.org/traits.html

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.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top