ruby tree class,为什么在初始化时有2个参数而不是1?

时间:2011-07-31 18:33:38

标签: 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:在`initialize'中:参数数量错误(2表示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>'
      
    
  

1 个答案:

答案 0 :(得分:3)

该行有2个参数:

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

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

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

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