Ist es möglich, Ruby zu zwingen, eine Initialisierungsmethode aufzurufen, wenn YAML.load_file verwendet wird? Ich möchte die Methode aufrufen, um Werte für Instanzvariablen bereitzustellen, die ich nicht serialisiere. Ich weiß, dass ich den Code in eine separate Methode einteilen und diese Methode aufrufen kann, nachdem ich YAML.load_file aufgerufen habe, aber ich frage mich, ob es eine elegantere Art gibt, mit diesem Problem umzugehen.Aufruf initialisieren beim Laden eines mit YAML serialisierten Objekts
6
A
Antwort
3
Ich glaube nicht, dass Sie können. Da der Code, den Sie hinzufügen, wirklich spezifisch für die zu deserialisierende Klasse ist, sollten Sie das Feature in der Klasse hinzufügen. Nehmen wir zum Beispiel Foo
sein die Klasse, die Sie deserialisieren möchten, können Sie eine Klassenmethode hinzufügen, wie zum Beispiel:
class Foo
def self.from_yaml(yaml)
foo = YAML::load(yaml)
# edit the foo object here
foo
end
end
myFoo = Foo.from_yaml("myFoo.yaml")
Könnten Sie ein bisschen mehr über erklären, was Sie zu tun versuchen? Meine erste Neigung besteht darin, eine Klasse zu erstellen, die den Aufruf von load_file umschließt und dann die Werte bereitstellt, die in der Konfigurationsdatei nicht vorhanden sind. Ich würde gerne eine umfassendere Lösung anbieten können. –