bug with assignment?

M

Mukund

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.
 
B

Ben Bleything

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

Ben
 
T

Tim Pease

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
 
T

Tim Hunter

Mukund said:
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.
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.
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

Forum statistics

Threads
474,264
Messages
2,571,323
Members
48,007
Latest member
Elvis60357

Latest Threads

Top