【发布时间】:2013-10-28 18:16:29
【问题描述】:
我编写了以下基本二叉搜索树的 Ruby 实现。
我相信rt = Node.new(data) 实际上并没有修改底层对象,而实际上只是一个被丢弃的临时变量。
#!/usr/bin/env ruby
class Node
attr_accessor :left, :right, :data
def initialize(d)
@left = nil
@right = nil
@data = d
end
end
class BST
attr_accessor :root
def initialize
@root = nil
end
def add_helper(rt, d)
if rt != nil
add_helper(rt.left, d) if d < rt.data
add_helper(rt.right, d) if d > rt.data
end
rt = Node.new(d)
end
def add(data)
add_helper(root, data)
end
def print_helper(rt)
return if rt == nil
pr(rt.left) if rt.left != nil
puts rt.data
pr(rt.right) if rt.right != nil
end
def print_tree
print_helper(root)
end
end
###########################
b = BST.new
b.add(5)
b.add(-10)
b.print_tree
我的实现有什么问题?我知道我应该调试,我真的有。我放了 print 语句,最终意识到一切,甚至是 Node 对象本身,仍然是 nil。
【问题讨论】:
-
"debugging" 可以比简单的打印语句扩展得更远。 Ruby 有几个调试器可供您使用,并且在我的小组中,它们会得到锻炼,因为我们确保我们的代码能够完成它应该做的事情。看看PRY,它既是一个IRB 替代品,也是一个不错的调试器,或者debugger 或byebug,这取决于你的Ruby 版本。见stackoverflow.com/a/4127651/128421。
标签: ruby binary-search-tree null