Ruby 为什么没有设置我的节点子节点?
我有下面的代码,不知道是否有人能告诉我为什么在运行它之后,Ruby 为什么没有设置我的节点子节点?,ruby,Ruby,我有下面的代码,不知道是否有人能告诉我为什么在运行它之后,@left\u child和@right\u child的值仍然为零 我想我知道为什么,但我要求向社区确认。还有,有没有一种方法可以让这项工作以这样的方式进行 module BinaryTree class Node attr_accessor :left_child, :right_child def initialize(value) @value = value
@left\u child
和@right\u 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
它们仍然为零,因为您从未为它们赋值。相反,您应该改为:
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
which_child
是create_child
的本地变量。调用该方法时,@right\u child
的值将被复制到它。您的代码基本上与
right_child = nil
which_child = right_child
which_child = true
# right_child is still nil!
Ruby中的变量存储指向对象的指针,Ruby按值传递这些指针。另见: