Domanda

Qual è la differenza tra mixin e Tratti?

Secondo Wikipedia , Ruby moduli sono un po 'come tratti. In che modo?

È stato utile?

Soluzione

  1. mixin può contenere Stato, (tradizionali) tratti non lo fanno.
  2. mixin usare "risoluzione dei conflitti implicito", tratti usano "risoluzione dei conflitti esplicito"
  3. Mixin dipende linearizzazione, i tratti sono appiattite.

Lezione sul tratti

ad 1. In mixins è possibile definire variabili di istanza. Tratti non consentono questo. Lo stato deve essere fornita da comporre classe (= classe utilizzando i tratti)

annuncio 2. Ci può essere il conflitto di nomi. Due mixins (MA e MB) o tratti (TA e TB) definiscono metodo con lo stesso foo():void definizione.

Mixin MA {
    foo():void {
        print 'hello'
    }
}

Mixin MB {
    foo():void {
        print 'bye'
    }
}

Trait TA {
    foo():void {
        print 'hello'
    }
}

Trait TB {
    foo():void {
        print 'bye'
    }
}

In mixins i conflitti in composizione di classe C mixins MA, MB sono risolti in modo implicito.

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

Questa chiamerà foo():void da MA

D'altra parte durante l'utilizzo di tratti, la composizione di classe ha per risolvere i conflitti.

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

Questo codice solleverà conflitto (due definizioni di foo():void).

annuncio 3. La semantica di un metodo non dipende dal fatto che è definito in un tratto o in una classe che utilizza il tratto.

In altre parole, non importa wheter la classe è costituito dai tratti o il codice Tratti è "copia - incollato". Nella classe

Altri suggerimenti

Queste pagine spiegano la differenza nel linguaggio di programmazione D.

http://dlang.org/mixin.html

http://dlang.org/traits.html

mixin in questo contesto sono codice generato al volo, e poi inserito in quel punto nel codice durante la compilazione. Molto utile per semplici DSL.

Tratti sono valori esterni di compilazione (anziché codice generato da una sorgente esterna). La differenza è sottile. Mixins aggiungere la logica, Tratti di aggiungere metadati quali le informazioni di tipo in fase di compilazione.

Non so molto di Ruby, ma speriamo che questo aiuta un po '.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top