Forum: Ruby Array.include? issue

Announcement (2017-05-07): www.ruby-forum.com is now read-only since I unfortunately do not have the time to support and maintain the forum any more. Please see rubyonrails.org/community and ruby-lang.org/en/community for other Rails- und Ruby-related community platforms.
-j b. (Guest)
on 2008-11-06 20:35
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?
Brian C. (Guest)
on 2008-11-06 23:12
-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. (Guest)
on 2008-11-07 10:54
Brian C. wrote:
>   STDERR.puts @history.inspect
>   STDERR.puts [@x, @y, @heading]

Oops, add .inspect at the end of the second line.
This topic is locked and can not be replied to.