【发布时间】:2016-11-10 11:52:50
【问题描述】:
我在 Ruby 中制作动态 yaml file
我有以下哈希
{
"defaults"=>
{"foo"=>"bar", "zip"=>"button"},
"node"=>
{
"<<"=>
{"foo"=>"bar", "zip"=>"button"},
"foo"=>"other"
}
}
当我尝试使用解析它时
tree = Psych.parse your_data
data = ToRubyNoMerge.new.accept tree
像这里一样覆盖解析器函数
require 'psych'
class ToRubyNoMerge < Psych::Visitors::ToRuby
def revive_hash hash, o
if o.anchor
@st[o.anchor] = hash
hash.instance_variable_set "@_yaml_anchor_name", o.anchor
end
o.children.each_slice(2) { |k,v|
key = accept(k)
hash[key] = accept(v)
}
hash
end
end
class MyEmitter < Psych::Visitors::Emitter
def visit_Psych_Nodes_Mapping o
o.anchor = 'defaults' if o.anchor
super
end
def visit_Psych_Nodes_Alias o
o.anchor = 'defaults' if o.anchor
super
end
end
现在当我尝试时
tree = Psych.dump yaml_constants
data = ToRubyNoMerge.new.accept tree
File.open(file, 'w') { |f| YAML.dump(data.to_yaml, f) }
它在下面给我错误
psych/visitors/to_ruby.rb:23:in `initialize':参数数量错误(给定 0,预期 2)(ArgumentError)
我们可以看到这是有道理的,因为 revive_hash 接受了两个参数,但同样的事情对 This 家伙有效。谁能告诉我我做错了什么
注意:我正在关注 This Post for parsing 并向 @matt 询问此问题,但他没有回复
【问题讨论】:
标签: ruby-on-rails ruby ruby-on-rails-4 yaml psych