2010-11-30 47 views
2

Je crée un hachage qui sera éventuellement sauvegardé sur le disque dans YAML, mais j'ai besoin de capturer plusieurs valeurs stockées dans un fichier sur le disque et les insérer dans un hachage. Je peux réussir à créer une variable avec des valeurs séparées par des virgules, mais je dois insérer ces valeurs dans un de mes « classes » clés:Insertion de valeurs dans un hachage pour le vidage YAML

variable_values = "class1,class2,class3" 

En fin de compte, je dois les amener dans mon hachage de test il simule quelque chose comme ça :

test_hash = {'Classes' => ['class1', 'class2', 'class3']} 

Enfin, je peux les sortir de YAML il ressemble à ceci:

--- 
classes: 
- class1 
- class2 
- class3 

Quelle est la meilleure façon de parcourir les valeurs et les insérer dans le hachage? Merci pour toute aide que vous pouvez offrir!

Répondre

3

Vous auriez probablement envie quelque chose comme:

+0

C'est exactement ce dont j'avais besoin - c'est tout à fait logique. – user376304

1

Si vous êtes désireux de sérialisation classes Ruby (je ne suis pas en mesure de dire à coup sûr), vous voudrez probablement le code suivant (avec la permission de opensoul.org, et tel qu'il est utilisé dans le Small Eigen Collider)

class Module 
    yaml_as "tag:ruby.yaml.org,2002:module" 

    def Module.yaml_new(klass, tag, val) 
    if String === val 
     val.split(/::/).inject(Object) {|m, n| m.const_get(n)} 
    else 
     raise YAML::TypeError, "Invalid Module: " + val.inspect 
    end 
    end 

    def to_yaml(opts = {}) 
    YAML::quick_emit(nil, opts) { |out| 
     out.scalar("tag:ruby.yaml.org,2002:module", self.name, :plain) 
    } 
    end 
end 

class Class 
    yaml_as "tag:ruby.yaml.org,2002:class" 

    def Class.yaml_new(klass, tag, val) 
    if String === val 
     val.split(/::/).inject(Object) {|m, n| m.const_get(n)} 
    else 
     raise YAML::TypeError, "Invalid Class: " + val.inspect 
    end 
    end 

    def to_yaml(opts = {}) 
    YAML::quick_emit(nil, opts) { |out| 
     out.scalar("tag:ruby.yaml.org,2002:class", self.name, :plain) 
    } 
    end 
end 

le code lance actuellement une exception si vous essayez de sérialiser/désérialiser classes anonymes (quelque chose que je pouvais réparer, mais ne pas besoin de), et à part que fonctionne bien pour moi.