で動的yaml file
にしていますRuby
私は次のハッシュを持っています
{
"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:`initialize' で: 引数の数が間違っています (指定された 0、予想される 2) (ArgumentError)
revive_hash
は2 つの引数を取りますが、同じことがこの連中に対しても機能したため、理にかなっていることがわかります。誰が私が間違っているのか教えてもらえますか
注:解析のためにこの投稿をフォローしており、@matt にこの問題について尋ねましたが、彼は応答していません