Array.include? issue

J

-j b-

I have the following method defined within a class.

def move
@heading ||= '>'
@history << [@x,@y,@heading]
case @heading
when '>'
@y += 1
when '<'
@y -= 1
when '^'
@x -= 1
else
@x += 1
end
error_out("Infinite Loop") if @history.include?([@x,@y,@heading])
end

which works as expected on my linux machine. However, when I try the
same code on OS X the

error_out("Infinite Loop") if @history.include?([@x,@y,@heading])

fails to execute correctly. In other words, even if [@x,@y,@heading]
exists in @history the error_out is never executed. I have verified that
it does exist by printing the contents of the @history array before the
check.
This is a single threaded application and in no other place is @history
modified.
I first ran on OS X with ruby version 1.8.2 and then installed 1.8.7
with the same results. I am running version 1.8.7 on my linux machine.
Is there an obvious thing that I am missing here?
 
B

Brian Candler

-j b- said:
However, when I try the
same code on OS X the

error_out("Infinite Loop") if @history.include?([@x,@y,@heading])

fails to execute correctly. In other words, even if [@x,@y,@heading]
exists in @history the error_out is never executed. I have verified that
it does exist by printing the contents of the @history array before the
check.

How did you print it? If it were me I'd add

STDERR.puts @history.inspect
STDERR.puts [@x, @y, @heading]

just before the error_out line. What does this show?

Could it be that error_out() really is being called, but is not behaving
the way you expect? Try changing to

raise "Infinite loop" if @history.include?([@x,@y,@heading])
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

No members online now.

Forum statistics

Threads
474,197
Messages
2,571,038
Members
47,633
Latest member
BriannaLyk

Latest Threads

Top