Komponieren unabhängiger Eigenschaften

8

Gegeben zwei unabhängige Merkmale:

%Vor%

Wenn ich versuche, eine Klasse zu definieren, die diese beiden Eigenschaften mischt:

%Vor%

Ich erhalte einen Compilerfehler:

%Vor%

Nun nehmen wir an, dass T1 und T2 unabhängig voneinander entwickelt wurden, also keine Überschreibung, da sie nichts übersteuern. Wie kann C dann definiert werden? So:

%Vor%

?

    
45g 05.05.2010, 10:27
quelle

1 Antwort

10

Dies ist bekannt als das Diamantenproblem . In Scala gibt es zwei Möglichkeiten, dies zu lösen:

%Vor%

Wenn Sie new C().x jetzt aufrufen, erhalten Sie 42 , weil Scala die Implementierung der Eigenschaft verwendet, die Sie zuletzt gemischt haben. new D().x wird übrigens 0 ergeben. Dies bedeutet, dass Sie, um das Diamantproblem zu lösen, explizit definieren müssen, welche Implementierung Sie verwenden möchten.

Der andere Weg ist wie folgt:

%Vor%

Ein Aufruf von new C().x liefert immer noch 42 , weil T2 das letzte Merkmal ist, das gemischt wurde. Der Unterschied besteht darin, dass Sie x in C nicht definieren müssen.

    
Michel Krämer 05.05.2010, 11:26
quelle

Tags und Links