Ich arbeite an einer kleinen GUI-Anwendung, die in Scala geschrieben wurde. Es gibt ein paar Einstellungen, die der Benutzer in der GUI vornehmen wird und ich möchte, dass sie zwischen den Programmausführungen bestehen bleiben. Im Grunde möchte ich eine scala.collections.mutable.Map, die bei einer Änderung automatisch in einer Datei bleibt.
Dies scheint ein häufiges Problem zu sein, aber ich konnte keine leichte Lösung finden. Wie wird dieses Problem normalerweise gelöst?
Ich mache eine Menge davon, und ich benutze .properties-Dateien (es ist idiomatisch in Java-Land). Ich halte meine Konfiguration durch Design ziemlich geradlinig. Wenn Sie Konfigurationskonstrukte verschachtelt haben, möchten Sie vielleicht ein anderes Format wie YAML (wenn Menschen die Hauptautoren sind) oder JSON oder XML (wenn Maschinen die Autoren sind).
Hier ist ein Beispielcode für das Laden von Requisiten, das Bearbeiten als Scala-Map und das anschließende Speichern als .properties:
%Vor%Hier ist ein Beispiel für die Verwendung von XML und einer Fallklasse zum Lesen einer Konfiguration. Eine echte Klasse kann schöner sein als eine Karte. (Sie könnten auch tun, was sbt und mindestens ein Projekt tun, nehmen Sie die Konfiguration als Scala-Quelle und kompilieren Sie es; Speichern ist weniger automatisch. Oder als Repl Skript. Ich habe nicht gegooglet, aber jemand muss das getan haben. )
Diese Version verwendet eine Fallklasse:
%Vor% Dieser Code ruft reflektiv das Anwenden einer Fallklasse auf. Der Anwendungsfall ist, dass Felder, die in der Konfiguration fehlen, standardmäßig mit Argumenten geliefert werden können. Keine Typumwandlungen hier. ZB case class Config(foo: String = "bar")
.
XML hat loadFile
und save
, es ist schade, dass es keinen Einzeiler für Properties
zu geben scheint.
Da alles darauf hinausläuft, eine Karte / ein Objekt in eine Datei zu serialisieren, haben Sie folgende Auswahlmöglichkeiten:
Tags und Links scala