Frage

Was ist der Unterschied zwischen Mixins und Traits?

Laut Wikipedia ist Ruby-Module Art wie Züge. Wie das?

War es hilfreich?

Lösung

  1. Mixins Zustand enthalten kann, (traditionell) Züge nicht.
  2. Mixins "implizite Konfliktlösung" verwenden, Traits "explizite Konfliktlösung" verwenden
  3. Mixins hängt von Linearisierungs sind Züge abgeflacht.

Vortrag über Züge

ad 1. In Mixins können Sie Instanzvariablen definieren. Traits dies nicht zulassen. Der Staat muss durch Zusammen Klasse zur Verfügung gestellt werden (= Klasse unter Verwendung der Züge)

Anzeige 2. Es kann der Name Konflikt. Zwei Mixins (MA und MB) oder Züge (TA und TB) definieren Methode mit der gleichen Definition 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'
    }
}

In Mixins die Konflikte beim Komponieren Klasse C mixins MA, MB implizit aufgelöst.

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

Dies wird foo():void von MA ruft

Auf der anderen Seite, während Merkmale verwenden, Klasse Komponieren hat Konflikte zu lösen.

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

Dieser Code wird Konflikt (zwei Definitionen von foo():void) erhöhen.

Anzeige 3. Die Semantik eines Verfahrens nicht von abhängen, ob es in einem Zug oder in einer Klasse definiert ist, die das Merkmal verwendet wird.

Mit anderen Worten, es spielt keine Rolle wheter die Klasse des Traits besteht oder den Traits-Code ist „copy - eingefügt.“ In die Klasse

Andere Tipps

Diese Seiten erklären den Unterschied in der D-Programmiersprache.

http://dlang.org/mixin.html

http://dlang.org/traits.html

Mixins sind in diesem Zusammenhang Code on the fly erzeugt und dann an dieser Stelle im Code während der Kompilierung eingefügt. Ganz praktisch für einfache DSLs.

Traits sind Kompilierung-externe Werte (und nicht als Code von einer externen Quelle erzeugt). Der Unterschied ist subtil. Mixins hinzufügen Logik, Traits Daten hinzufügen, wie Kompilierung-Typinformationen.

Sie wissen nicht viel über Rubin, aber hoffe, das hilft ein wenig.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top