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.

This forum is not affiliated to the Ruby language, Ruby on Rails framework, nor any Ruby applications discussed here.

| Privacy Policy | Terms of Service | Remote Ruby Jobs