Bezieht sich auf parametrisierte Typen

8

Ich habe eine Karte, in der sowohl die Schlüssel als auch die Werte generische Typen sind. Etwas wie das:

%Vor%

Was ich ausdrücken möchte, ist, dass der Typ A für jedes Schlüssel / Wert-Paar in der Map unterschiedlich sein kann, aber jeder Schlüssel immer mit dem gleichen Typ parametrisiert ist wie der Wert, dem er zugeordnet ist. Ein Foo[Int] wird also immer einem Bar[Int] zugeordnet, ein Foo[String] wird immer einem Bar[String] zugeordnet und so weiter.

Kennt jemand eine Möglichkeit, dies auszudrücken?

BEARBEITEN:

Hier ist ein Beispiel für die Art von Dingen, die ich versuche zu tun:

%Vor%

Die Idee ist, dass ein Wert immer einer Funktion zugeordnet wird, die ihn als Parameter akzeptieren kann, aber da der Code jetzt geschrieben wird, kann der Compiler das nicht wissen.

    
Masterofpsi 26.10.2011, 00:20
quelle

4 Antworten

2

Wie sich herausstellt, ist es möglich, eine heterogene Karte in Scala zu definieren. Hier ist eine grobe Skizze:

%Vor%

Dies könnte vollständig typsicher gemacht werden, indem intern eine verknüpfte Liste von Zuordnungen anstelle einer Zuordnung verwendet wird, aber dies ist besser für die Leistung.

Mein ursprüngliches Beispiel würde so aussehen:

%Vor%

Das ist fast perfekt, außer dass ich mir nicht sicher bin, wie man Grenzen hinzufügt.

    
Masterofpsi 29.10.2011, 21:55
quelle
1

Sie versuchen, eine Art höherrangiger polymorpher , heterogene Map, wobei jedes Schlüssel / Wert-Paar in der Map einen anderen Typparameter haben kann. So cool es auch sein mag, Scalas Typsystem erlaubt es Ihnen nicht, dies statisch auszudrücken. Ich denke, das Beste, was Sie tun können, ist, einige schreckliche, unsichere Hilfsmethoden zu definieren:

%Vor%

Sie können es vielleicht etwas sicherer machen, indem Sie Manifest s benutzen, um die Typparameter jedes Schlüssel / Wert-Paares zur Laufzeit zu verifizieren, aber ich bin mir nicht sicher, wie ...

    
mergeconflict 26.10.2011 02:03
quelle
0

Ich habe eine Karte implementiert, die das macht, was Sie wollen. Sie können hier einige grundlegende Dokumente finden: Ссылка

TypeBoundMaps verwendet Typen mit einem einzigen Typparameter. Daher müssen Sie in der Map einige neue Typen für Ihre Schlüssel- und Werttypen einführen:

%Vor%

Jetzt können Sie die gewünschte Karte so erstellen:

%Vor%

Hier ein paar Beispiele für die Verwendung der Karte:

%Vor%

Um nun die for-Schleife in Ihrem Beispiel nachzuahmen, müssen wir einen neuen Typ TypeBoundPair einfügen, bei dem es sich um ein Schlüssel / Wert-Paar handelt, bei dem die Parameterwerte übereinstimmen:

%Vor%

Die Idee hinter der Einführung der Typen Identity und Handler wird hier genauer erklärt: Ссылка

    
john sullivan 09.10.2015 22:21
quelle
-2
%Vor%     
Kim Stebel 26.10.2011 03:52
quelle

Tags und Links