Los Mixins vs Rasgos


¿Cuál es la diferencia entre Mixins y Traits?

De acuerdo con Wikipedia, los módulos Ruby son como rasgos. ¿Cómo es eso?

Author: mghie, 2009-05-29

2 answers

  1. Los mixins pueden contener estado, los rasgos (tradicionales) no.
  2. Los mixins usan "resolución implícita de conflictos", los traits usan"resolución explícita de conflictos"
  3. Los mixins dependen de la linealización, los rasgos se aplanan.

Conferencia sobre rasgos

Ad 1. En mixins puede definir variables de instancia. Los rasgos no permiten esto. El estado debe proporcionarse componiendo class (=class using the traits)

Ad 2. Alli puede ser el conflicto de nombre. Dos mixins (MA y MB) o rasgos (TA y TB) definen el método con la misma definición foo():void.

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 clase de composición C mixins MA, MB se resuelven implícitamente.

Class C mixins MA, MB {
    bar():void {
        foo();
    }
}

Esto llamará foo():void desde MA

Por otro lado, al usar Rasgos, componer clase tiene que resolver conflictos.

Class C mixins TA, TB {
    bar():void {
        foo();
    }
}

Este código generará conflicto (dos definiciones de foo():void).

Ad 3. La semántica de un el método no depende de si está definido en un rasgo o en una clase que usa el rasgo.

En otras palabras, no importa si la clase consiste en los Traits o si el código Traits está "copiado - pegado" en la clase.

 196
Author: jk_,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-01-26 09:41:49

Estas páginas explican la diferencia en el lenguaje de programación D.

Http://dlang.org/mixin.html

Http://dlang.org/traits.html

Los mixins en este contexto son código generado sobre la marcha, y luego insertado en ese punto en el código durante la compilación. Muy útil para DSLS simples.

Los Traits son valores externos en tiempo de compilación (en lugar de código generado a partir de una fuente externa). La diferencia es sutil. Mixins añadir lógica, Rasgos añadir datos tales como información de tipo en tiempo de compilación.

No sé mucho sobre Ruby, pero espero que esto ayude un poco.

 8
Author: Aiden Bell,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-07-09 20:04:28