Bug with assignment?

The snippet illustrates my question.

a={}
b={}
a[“alpha”]=b[“alpha”]=[]
a[“alpha”]<<23
b[“alpha”]<<100
puts a[“alpha”]
puts b[“alpha”]

Here a[“alpha”] and b[“alpha”] both contain an array of [23,100].
Why??

If I remove the multiple assignment,
a={}
b={}
a[“alpha”]=[]
b[“alpha”]=[]
a[“alpha”]<<23
b[“alpha”]<<100
puts a[“alpha”]
puts b[“alpha”]

a[“alpha”] contains 23 and b[“alpha”] contains 100 as I expected.

On 9/16/07, Mukund [email protected] wrote:

The snippet illustrates my question.

a={}
b={}
a[“alpha”]=b[“alpha”]=[]

You are assigning a new Array to the key “alpha” in the hash b. The
return value from hash assignment is the object stored in the hash –
i.e. the new Array you created. This object is then assigned to the
key “alpha” in the hash a.

Blessings,
TwP

On Mon, Sep 17, 2007, Mukund wrote:

Here a[“alpha”] and b[“alpha”] both contain an array of [23,100].
Why??

It’s this line, right here.

a[“alpha”]=b[“alpha”]=[]

What’s happening is the a[“alpha”] is getting the result of
b[“alpha”]=[], which is the empty array on the far-right of the
assignment. Both a[“alpha”] and b[“alpha”] contain a reference to the
same array.

If I remove the multiple assignment,
a[“alpha”]=[]
b[“alpha”]=[]

a[“alpha”] and b[“alpha”] now are both references to different empty
arrays.

Hope that helps :slight_smile:

Ben

Mukund wrote:

Here a[“alpha”] and b[“alpha”] both contain an array of [23,100].
puts b[“alpha”]

a[“alpha”] contains 23 and b[“alpha”] contains 100 as I expected.

Because, in the first case, both a[“alpha”] and b[“alpha”] refer to the
same array. You simply have two different ways of referring to it.

In the second case, the code constructs two different arrays.