Array#sort unexpected behaviour

D

daniel åkerud

[Note: parts of this message were removed to make it a legal post.]

Please explain why "a" is corrupted after call to Array#sort:

irb(main):044:0> a=[[1, "abc"],[3, "def"],[2, "efg"]]
=> [[1, "abc"], [3, "def"], [2, "efg"]]
irb(main):045:0> a.sort { |a, b| a[0] <=> b[0] }
=> [[1, "abc"], [2, "efg"], [3, "def"]]
irb(main):046:0> a
=> [1, "abc"]

A new sorted array is correctly returned, but "a" itself is not left intact.
It seems to have something to do with me using an array-of-arrays.

/D
 
D

Dave Thomas

irb(main):044:0> a=3D[[1, "abc"],[3, "def"],[2, "efg"]]
=3D> [[1, "abc"], [3, "def"], [2, "efg"]]
irb(main):045:0> a.sort { |a, b| a[0] <=3D> b[0] }
=3D> [[1, "abc"], [2, "efg"], [3, "def"]]
irb(main):046:0> a
=3D> [1, "abc"]

A new sorted array is correctly returned, but "a" itself is not left =20=
intact.
It seems to have something to do with me using an array-of-arrays.


Your block parameter is also called 'a'.

In Ruby 1.9, this isn't an issue, but in 1.8, the variable is the same =20=

as the block parameter.


Dave=
 

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
473,997
Messages
2,570,240
Members
46,830
Latest member
HeleneMull

Latest Threads

Top