Consider the following file "tree.rb" ...
----------------------------------------------------------------------
class Tree
include Enumerable
attr_reader :value
attr_reader :left
attr_reader :right
def initialize(value, left=nil, right=nil)
@value, @left, @right = value, left, right
end
def each(&block)
yield @value
@left.each &block if @left
@right.each &block if @right
end
end
def createTree
Tree.new(1,
Tree.new(2, Tree.new(3), Tree.new(4)),
Tree.new(5, Tree.new(6), Tree.new(7)))
end
def find(t,v)
t.detect { |n| n==v }
end
$t = createTree
$t.each {|n| print n, " "}
p $t.detect { |n| n==3 } # LINE A
----------------------------------------------------------------------
I can load and run the file from irb ...
bash$ irb
irb(main):001:0> load 'tree.rb'
1 2 3 4 5 6 7 3
3
true
But if I try to execute a line containing detect directly in irb
(e.g. LINE A above), I get ...
irb(main):002:0> $t.detect { |n| n==3 }
LocalJumpError: break from proc-closure
(irb):2:in `each'
./tree.rb:11:in `each'
(irb):2:in `detect'
(irb):2:in `irb_binding'
Is this an irb problem, or a problem with my recursive definition of
each, or a combination?
--
-- Jim Weirich jweirich / one.net http://w3.one.net/~jweirich
---------------------------------------------------------------------
"Beware of bugs in the above code; I have only proved it correct,
not tried it." -- Donald Knuth (in a memo to Peter van Emde Boas)