ruby树类,为什么它说在初始化中有2个参数而不是1个?

标签 ruby

class Tree
attr_accessor :children, :node_name

def initialize(tree_hash={})
    tree_hash.each do |k,v|
        @node_name = k
        @children = v.map { |k,v|   Tree.new(k,v) }
    end
end

def visit_all(&block)
    visit &block
    children.each {|c| c.visit_all &block}
end

def visit(&block)
    block.call self
end
end

ruby_tree = Tree.new({'grandpa' => {'dad' => {'child 1' => {}, 'child 2' => {} },'uncle' => {'child 3' => {}, 'child 4' => {} } } })

puts "Visiting a node"
ruby_tree.visit {|node| puts node.node_name}
puts

puts "visiting entire tree"
ruby_tree.visit_all {|node| puts node.node_name}

错误消息:(我使用的是 ruby​​ 1.9.2)

C:\ruby>ruby tree.rb

tree.rb:4:in `initialize': wrong number of arguments (2 for 1) (ArgumentError)

   from tree.rb:7:in `new'
   from tree.rb:7:in `block (2 levels) in initialize'
   from tree.rb:7:in `each'
   from tree.rb:7:in `map'
   from tree.rb:7:in `block in initialize'
   from tree.rb:5:in `each'
   from tree.rb:5:in `initialize'
   from tree.rb:21:in `new'
   from tree.rb:21:in `<main>'

最佳答案

该行有 2 个参数:

@children = v.map { |k,v|   Tree.new(k,v) }

也许您想将 k,v 更改为 {k => v}

    @children = v.map { |k,v|   Tree.new(k=>v) }

我认为初始化是有问题的 - 你正在实现什么样的树?

关于ruby树类,为什么它说在初始化中有2个参数而不是1个?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6891475/

相关文章:

ruby - 如何测试 RSpec 自定义匹配器

ruby - 将 3 个命令重写为一个可以在 cron 上运行的命令或脚本

ruby - Nyaplot 在 jupyterhub 中运行的 iruby 中不生成任何图

python - 调试像 ruby​​ 这样的脚本语言

ruby-on-rails - 如何将数据库中缺少的参数字段合并到 rails 中的参数哈希

javascript - 是否有具有完整开发周期的基于原型(prototype)的语言?

ruby - 如何查看 Heroku 日志中请求的 IP 地址?

ruby-on-rails - 更改 bundle 安装 Ruby 版本

ruby - 如何将自定义日志级别添加到 ruby​​ 中的记录器?

ruby-on-rails - 使用 Rails、Paperclip 和 Backbone 上传文件