Hello yashi,

Yasushi Shoji writes:
> From: Dave Thomas <Dave / thomases.com>
> Subject: [ruby-talk:01084] Infinite loop
> Date: 10 Jan 2000 18:30:20 -0600
> 
> > I don't know if this is a bug or expected behavior - I could argue it
> > either way, but..
> 
> it is expected behavior as far as I can tell.  The method Array#=, or
> should I say method Array#[]=(?), takes the reference of a, not a copy
> of a.  you can use Array#dup to create a copy of a to insert to a[1].

perhaps I am wrong but I think the problem for Dave is, that it loops
endless. Please have a look!

In this line, all is ok!

   ruby> a = [1, 2, 3]
   [1, 2, 3]

Here, he introduce the self referencing of the Array. But no big deal:
the interpreter can handle it, and reduce the output properly...

   ruby> a[1] = a
   [1, [...], 3]

But here, the interpreter seems not to be able to handle the
recursion. That is what bother him, I assume!

   ruby> { a => 1 }

This time the problem seems not to be in the output loop but in the
hash function. As you use 'a' as key, the hash of that array has to be
calculated. And the hash will be calculated (I guess, I have not
looked into the sources) with taking *every* element of the array into
account.

Perhaps the hash function of that array, could be able to know that
it is calculating the reference to itself and so does not looping?!?

> 
> $ ruby -e "a=[1,2,3]; a[1]=a.dup; p a"
> [1, [1, 2, 3], 3]
> 
> hope this helps,
> --
>           yashi
> 

\cle

-- 
Clemens Hintze  mailto: c.hintze / gmx.net