2009-12-01 28 views
6

Est-il possible de forcer Ruby à appeler une méthode initialize lors de l'utilisation de YAML.load_file? Je veux appeler la méthode afin de fournir des valeurs pour les variables d'instance que je ne sérialise pas. Je sais que je peux factoriser le code dans une méthode séparée et appeler cette méthode après avoir appelé YAML.load_file, mais je me demandais s'il y avait une façon plus élégante de gérer ce problème.Appel initialisation lors du chargement d'un objet sérialisé avec YAML

+0

Pouvez-vous expliquer un peu plus sur ce que vous essayez de faire? Ma première tendance est de créer une classe qui enveloppe l'appel à load_file et fournit ensuite les valeurs qui n'existent pas dans le fichier de configuration. J'aimerais pouvoir fournir une solution plus complète. –

Répondre

3

Je ne pense pas que vous le pouvez. Puisque le code que vous allez ajouter est vraiment spécifique à la classe en cours de désérialisation, vous devriez envisager d'ajouter la fonctionnalité dans la classe. Par exemple, laissez-Foo être la classe que vous voulez désérialiser, vous pouvez ajouter une méthode de classe tels que:

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") 
Questions connexes