我正在创建一个最终将在YAML中转储到磁盘上的哈希,但是我需要捕获存储在磁盘上的文件中的多个值并将它们插入到哈希中。我可以使用逗号分隔值成功创建变量,但我需要将这些值插入到我的“classes”键中:
variable_values = "class1,class2,class3"
最终,我需要将它们放入我的测试哈希中,以便模拟这样的事情:
test_hash = {'Classes' => ['class1', 'class2', 'class3']}
最后,我可以将它们输出到yaml,所以它看起来像这样:
---
classes:
- class1
- class2
- class3
迭代值并将其插入哈希值的最佳方法是什么?感谢您提供的任何帮助!
答案 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
如果您尝试序列化/反序列化匿名类(我可以修复但不需要),代码当前会引发异常,除此之外,它对我有用。