Philip Brocoum wrote: > I think it makes perfect sense. If you are doing multiple assignments, > do this: > > a = b = c = "hi" > > But it's pretty cool to be able to do this: > a, b, c = ["hi", "hello", "wassa"] The problem is: what is the value of a after: a, b, c = d ? The answer is: it depends. If d is an array, then a becomes d[0], otherwise a becomes d. Since you can write: a, b, c = "hi", "hello", "wassa" setting each value, and: a, b, c = "hi" sets a to "hi" and the other two become nil and since ["hi", "hello", "wassa"] is a single object, it seems natural to expect that: a, b, c = ["hi", "hello", "wassa"] should set a to the array and set b & c to nil, but it doesn't. Why should a be set differently in the following cases: a, b, c = ["hi", "hello", "wassa"] a, b, c = ["hi", "hello", "wassa"], "hey" You would expect that each of the following would result in a ending up with the value of d: a = d a, b = d a, b, c = d but it doesn't. If d is an array, then "a = d" sets a to the value of d, but the others set it to d[0]. If d is not an array, then a takes the value of d in all cases. Having an object change implicitly into something else like this is definitely a gotcha. Further, consider this example: a = [[1, 2, 3]] b, c, d = *a What is the value of b? Since the multiple assignment is "equivalent" to: b, c, d = [1, 2, 3] it would seem that the way arrays automagically expand would result in b becoming 1, but actually b becomes the array [1, 2, 3] meaning that automagic expansion is not happening. So even the inconsistency is inconsistent! The semantics of assignment should not change just because the class of something on the rhs changes. -- Posted via http://www.ruby-forum.com/.