我有以下代码,并且想知道是否有人可以告诉我为什么在运行它之后,@left_child
和@right_child
的值仍为零。
我想我知道为什么,但我要求向社区确认。另外,有没有办法让我的工作方式像这样?
module BinaryTree
class Node
attr_accessor :left_child, :right_child
def initialize(value)
@value = value
@left_child = nil
@right_child = nil
end
def add_child(value)
if value > @value
create_child(value, @right_child)
else
create_child(value, @left_child)
end
end
private
def create_child(value, which_child)
if which_child.nil?
which_child = Node.new(value)
else
which_child.add_child(value)
end
end
end
end
node = BinaryTree::Node.new(50)
node.add_child(20)
node.left_child # => nil
node.add_child(70)
node.right_child # => nil
答案 0 :(得分:0)
它们仍然是零,因为您从未为它们分配值。相反,你应该改为:
module BinaryTree
class Node
attr_accessor :left_child, :right_child
def initialize(value)
@value = value
@left_child = nil
@right_child = nil
end
def add_child(value)
if value > @value
@right_child = create_child(value, @right_child)
else
@left_child = create_child(value, @left_child)
end
end
private
def create_child(value, which_child)
if which_child.nil?
which_child = Node.new(value)
else
which_child.add_child(value)
end
which_child
end
end
end
答案 1 :(得分:0)
which_child
是create_child
的本地变量。调用方法时,@right_child
的值正在复制。您的代码与
right_child = nil
which_child = right_child
which_child = true
# right_child is still nil!
Ruby中的变量存储指向对象的指针,Ruby通过 value 传递这些指针。另见: