2009-12-01 11 views
6

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

+0

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. –

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") 
Verwandte Themen