下面是一个实现树的程序。
class Tree
attr_accessor :children, :node_name
def initialize(name_children=[])
@children = children
@node_name = name
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( "Ruby", [Tree.new("Reia"), Tree.new("MacRuby")] )
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_tree = Tree.new( "Ruby", [Tree.new("Reia"), Tree.new("MacRuby")] )
我收到的错误是
tree.rb:6:in `initialize': undefined local variable or method `name' for #<Tree:0x007f94020249f8 @children=nil> (NameError)
from tree.rb:19:in `new'
from tree.rb:19:in `<main>'
任何帮助都会很棒。
答案 0 :(得分:3)
您的initialize
方法中有一个拼写错误,只接受一个名为name_children
的参数,但从该方法的主体看,下划线应该是逗号 - name, children
。
答案 1 :(得分:1)
问题在于第6行@node_name = name
。你在哪里定义那个变量?
答案 2 :(得分:0)
在构造函数中,(初始化),为什么不输入变量children,并且这样命名而不是children_name?在我看来,当你试图通过创建对象来实例化类时,当它进入初始化构造函数时,它在那里找不到名字。
def initialize(name, children=[])
@children = children
@node_name = name
en
答案 3 :(得分:0)
由于您在模型中定义了attr_accessor:name,因此您必须在模型中定义Children方法,如
{{1}}