Serialisierung von Scala-Funktionen

8

Ich weiß, dass es Jerkson und scalaxb und sogar Javas XStream gibt, die scala's Daten erfolgreich serialisieren können. Ich weiß, dass sie gut Strings, Integer und sogar Fallklassen gut behandeln. Aber wenn ich als eines der Felder funktioniere?

z.B. wenn ich etwas wie:

habe %Vor%

Können diese Felder irgendwie zu JSON oder XML serialisiert werden (eigentlich interessiert mich nicht, welche sollten sie lesbar sein, deshalb möchte ich nicht SBinary )?

BEARBEITEN

Warum sollte ich das tun? Im Moment schreibe ich die Implementierung des Entscheidungsbaums. Ich will diese Bäume nicht jedes Mal aus Trainingsdaten rekonstruieren, daher muss ich sie serialisieren, und dieser Teil könnte mit SBinary gemacht werden. Aber es wäre auch schön, wenn wir als Menschen einen serialisierten Baum betrachten und analysieren könnten.

Es ist keine so große Aufgabe, wie ich im Titel geschrieben habe, ja. Was ich jetzt denke, ist, einen benutzerdefinierten Serializer (z. B. für Jerkson) mit meinem eigenen Format zu schreiben oder in ein String-Feld zu schreiben und diesen dann wieder zu analysieren.

Aber ich dachte mir, dass es einen etwas besseren Weg geben könnte, das zu tun.

    
om-nom-nom 19.03.2012, 12:39
quelle

3 Antworten

8

Nein, eine Funktion ist nicht notwendig serialisierbar ... und serialisierbare Funktionen werden wahrscheinlich keine lesbare Serialisierung bieten.

Wenn Sie in der Lage sein möchten, jede Art von Funktion zu bieten, ich fürchte, es wird keine Lösung geben. Eine mögliche Problemumgehung, wenn sie in Ihrem Szenario verwendet werden kann, besteht darin, eine Fallklasse zu erstellen, die Function[Int, Boolean] implementiert und somit zu einem Fallklassen-Szenario zurückkehrt.

Nehmen Sie beispielsweise an, dass Sie isoliert haben, dass alle Ihre Funktionen überprüfen, ob eine ganze Zahl genau durch eine gegebene ganze Zahl teilbar ist:

%Vor%

Es ist eindeutig ultra-restriktiv. Aber ich fürchte, es ist das Beste, was du erreichen kannst.

Laut Ihrer Bearbeitung. Eine Lösung könnte eine Art Fabrikklasse sein:

%Vor%

Aber hier werden Sie die Sicherheit verlieren.

    
Nicolas 19.03.2012, 13:09
quelle
10

Ja. Es ist möglich und hat mich gerade umgehauen:

%Vor%

NB. Funktioniert nicht für Klassen, die in äußeren Klassen oder Funktionsbereichen definiert sind. (was sinnvoll ist, da Sie wahrscheinlich nicht den Verweis auf die äußere Klasse serialisieren wollten).

Sehr cool, aber beachten Sie, dass die JVM erfordert, dass die geladenen Klassenreferenzen im Klassenpfad verfügbar sind, wenn das Objekt geladen wird. (Dies ist kein Allzweck-Serialisierungspfad, da der Leser auch Zugriff auf die zu deserialisierenden Kompilierungsklassendateien haben muss)

    
user48956 28.04.2016 23:46
quelle
3

Wie würden Sie eine Funktion im semantischen Sinne serialisieren? Der einzig denkbare Weg wäre, die tatsächliche Implementierung (d. H. Bytecode) zu kodieren, was in beiden Formaten möglich ist, aber eine Welt des Schmerzes an sich ist (Klassenladen, Versionierung, Leistung ...)

Kurz gesagt, ohne zusätzlichen Kontext macht Ihre Frage wenig Sinn.

    
Tomer Gabel 19.03.2012 13:20
quelle

Tags und Links