Array.include? issue

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?

-j b- wrote:

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])

Brian C. wrote:

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

Oops, add .inspect at the end of the second line.