【问题标题】:ToRubyNoMerge argument error - Psych - Yaml Parser - ruby on railsToRubyNoMerge 参数错误 - Psych - Yaml Parser - ruby​​ on rails
【发布时间】: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


    【解决方案1】:

    我们可以看出这是有道理的,因为revive_hash 接受了两个参数

    你得到的错误与revive_hash无关。

    正如您可能在文档中看到的那样,Psych::Visitors::ToRuby#new 需要两个参数:ClassLoaderScalarScanner

    您实例化ToRubyMerge,它是上述的直接后代,根本没有为initialize 提供任何参数。这正是你得到的错误所说的。

    要对两者都使用默认值,可以使用#create factory:

    #             ⇓⇓⇓⇓⇓⇓
    ToRubyNoMerge.create.accept tree
    

    【讨论】:

    • 亲爱的我做了改变,现在它说 - #
    • 这与原问题完全无关。
    • 我也这么认为,好吧,我检查一下这个错误,然后我也会检查你的答案。我只是觉得值得一问-再次感谢。但如果你有任何关于它的信息,请让我知道
    猜你喜欢
    • 1970-01-01
    • 2014-02-03
    • 1970-01-01
    • 2023-02-20
    • 1970-01-01
    • 2016-02-13
    • 1970-01-01
    • 2017-06-15
    • 2014-04-17
    相关资源
    最近更新 更多