Effizientes Serialisieren von Fallklassen

8

Für eine Bibliothek, an der ich gerade arbeite, muss ich eine effiziente, praktische und typsichere Methode zur Verfügung stellen, mit der Sie die Scala-Klassen serialisieren können. Das Ideal wäre, wenn ein Benutzer eine Fallklasse erstellen kann, und solange alle Mitglieder serialisierbar sind, sollte es auch so sein. Ich kenne den Typ sowohl während der Serialisierungs- als auch der Deserialisierungsstufe genau, so dass keine "Schema" -Informationen als Teil des Seriierungsformats (wie die Java-Objekt-Serialisierung) benötigt werden (und es sich nicht leisten können).

Ich habe mit ein paar Ideen gespielt, und diese scheint mir ziemlich nahe zu kommen. Das Hauptproblem, das ich hier sehe, ist, wie der Benutzer Klasse "anwenden" und "nicht anwenden" -Funktion angeben muss. Da dies wirklich statische Funktionen sind, frage ich mich, ob es möglich ist, dass der Compiler es findet.

Hier ist ein eigenständiges Beispiel:

%Vor%

Und dann brauche ich eine Funktion wie folgt:

%Vor%

Was einem Benutzer erlauben würde, es ziemlich einfach zu benutzen. z.B.

%Vor%

Aber wie Sie sehen können, war diese letzte Zeile wirklich ziemlich falsch. Sicher muss es möglich sein, das zu verbessern? (Gegeben ein Jesus, ich kann sicherlich die 'unanwendbare' statische Methode finden)

    
Heptic 13.10.2011, 03:59
quelle

1 Antwort

3

Da Sie keine generische Methode zum Abrufen des Begleitobjekts einer bestimmten Fallklasse haben, fügen Sie zusätzliche Aufgaben hinzu. Ich sehe drei Möglichkeiten:

  1. Sie können entweder strukturelle Typisierung verwenden, aber Sie verlieren die Leistung
  2. Sie können eine kleine Typklasse verwenden, um implizit die korrekte unapply -Methode aufzulösen.
  3. Sie können den Fallklasseninstanzen eine toTuple -Methode hinzufügen.

Zum Beispiel:

%Vor%

Codebeispiel für Option 2:

%Vor%

Sie sollten sich SBinary ansehen, es sieht ähnlich aus.

    
paradigmatic 13.10.2011, 07:06
quelle

Tags und Links