将值插入Hash for YAML转储

时间:2010-11-30 20:06:57

标签: ruby hash yaml loops

我正在创建一个最终将在YAML中转储到磁盘上的哈希,但是我需要捕获存储在磁盘上的文件中的多个值并将它们插入到哈希中。我可以使用逗号分隔值成功创建变量,但我需要将这些值插入到我的“classes”键中:

variable_values = "class1,class2,class3"

最终,我需要将它们放入我的测试哈希中,以便模拟这样的事情:

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

最后,我可以将它们输出到yaml,所以它看起来像这样:

--- 
classes: 
- class1
- class2
- class3

迭代值并将其插入哈希值的最佳方法是什么?感谢您提供的任何帮助!

2 个答案:

答案 0 :(得分:3)

你可能想要这样的东西:

test_hash = {'Classes' => variable_values.split(',')}

答案 1 :(得分:1)

如果您想序列化Ruby类(我无法确定),您可能需要以下代码(由opensoul.org提供,并且在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

如果您尝试序列化/反序列化匿名类(我可以修复但不需要),代码当前会引发异常,除此之外,它对我有用。