Scala implizite Reihenfolge

8

Gibt es eine Möglichkeit für mich, die gleiche implizite Reihenfolge für zwei verschiedene Klassen zu definieren?

Ich habe versucht, etwas in den folgenden Zeilen zu tun, aber es erkennt die Reihenfolge nicht.

%Vor%     
Olshansk 08.09.2014, 22:13
quelle

2 Antworten

22

Wie von @ntn angegeben, ist der abgeleitete Typ Ihrer Liste - die kleinste Obergrenze der beiden Elemente - Product with Serializable with Common . Da scala.Ordering in seinem Typparameter nicht kontravariant ist, schlägt die implizite Auflösung fehl, da Ordering[Common] <: Ordering[Product with Serializable with Common] nicht enthalten ist.

Sie können dies umgehen, indem Sie die implizite Reihenfolge so schreiben, dass sie immer den genauen Typ des betrachteten impliziten Parameters enthält:

%Vor%

Oder für die Prägnanz:

%Vor%     
J Cracknell 09.09.2014, 00:05
quelle
2

Wenn Sie die Fallklasse für A und B (oder auch nur für eine davon) entfernen, funktioniert es. Für List(A(), B()).sorted findet sich kein Ordering für Product with Serializable with C , da die Basisklasse für A und B Produkt mit C ist (da A und B beide Fallklassen sind).

Wenn Sie eine Liste mit Elementen zweier verschiedener Basistypen erstellen, nehme ich an, dass Sie eine Liste vom Typ List[C] haben möchten, in der Sie die Elemente deklarieren können, bevor Sie sie verwenden (oder sie von einer Funktion erhalten, die den Typ% zurückgibt). co_de%.

%Vor%     
ntn 08.09.2014 23:08
quelle

Tags und Links