Surprising(?) behaviour of the comma operator

Hi!

I just stumbled over a (at least for me) surprising behaviour
of the comma (’,’) operator:

irb(main):001:0> a,b = 1,2
[1, 2]
irb(main):002:0> puts a.class, b.class
Fixnum
Fixnum
nil

Ok, no surprises so far. Here we go:

irb(main):003:0> a=1, b=2
[1, 2]
irb(main):004:0> puts a.class, b.class
Array
Fixnum
nil

that is, a=1, b=2 creates an Array a instead of a Fixnum.
I don’t think this is a bug, since others surely have spotted
this before me, but what’s the rationale behind this?

kind regards
frank

···


Frank Schmitt
4SC AG phone: +49 89 700763-0
e-mail: frankNO DOT SPAMschmitt AT 4sc DOT com

Hi,

I just stumbled over a (at least for me) surprising behaviour
of the comma (‘,’) operator:

Ruby has no comma operator like C.

irb(main):003:0> a=1, b=2
[1, 2]
irb(main):004:0> puts a.class, b.class
Array
Fixnum
nil

If you really want to use multi-statement, use semicolon (:wink:
instead.

···

At Mon, 8 Dec 2003 18:32:03 +0900, Frank Schmitt wrote:


Nobu Nakada

Hi –

···

On Mon, 8 Dec 2003, Frank Schmitt wrote:

Hi!

I just stumbled over a (at least for me) surprising behaviour
of the comma (‘,’) operator:

irb(main):001:0> a,b = 1,2
[1, 2]
irb(main):002:0> puts a.class, b.class
Fixnum
Fixnum
nil

Ok, no surprises so far. Here we go:

irb(main):003:0> a=1, b=2
[1, 2]
irb(main):004:0> puts a.class, b.class
Array
Fixnum
nil

that is, a=1, b=2 creates an Array a instead of a Fixnum.
I don’t think this is a bug, since others surely have spotted
this before me, but what’s the rationale behind this?

What you’ve done is essentially:

a = 1,2

with the side-effect of assigning 2 to b:

a = 1,b=2

David


David A. Black
dblack@wobblini.net

Correct of course. To clarify a little for the original poster,
the statement is equivalent to:

a = [1, b=2]

Hal

···

nobu.nokada@softhome.net wrote:

Hi,

At Mon, 8 Dec 2003 18:32:03 +0900, > Frank Schmitt wrote:

I just stumbled over a (at least for me) surprising behaviour
of the comma (‘,’) operator:

Ruby has no comma operator like C.

irb(main):003:0> a=1, b=2
[1, 2]
irb(main):004:0> puts a.class, b.class
Array
Fixnum
nil

If you really want to use multi-statement, use semicolon (:wink:
instead.

nobu.nokada@softhome.net writes:

Hi,

I just stumbled over a (at least for me) surprising behaviour
of the comma (‘,’) operator:

Ruby has no comma operator like C.

irb(main):003:0> a=1, b=2
[1, 2]
irb(main):004:0> puts a.class, b.class
Array
Fixnum
nil

If you really want to use multi-statement, use semicolon (:wink:
instead.

Normally I don’t use multi-statements, but (coming from C++) I
wrote

def initialize(a,b)
@a = a, @b = b
end

Writing

def initialize(a,b)
@a,@b = a,b
end

instead is no big deal, I just have to remember it :slight_smile:

Thanks to all for the quick responses & kind regards
frank

···

At Mon, 8 Dec 2003 18:32:03 +0900, > Frank Schmitt wrote:


Frank Schmitt
4SC AG phone: +49 89 700763-0
e-mail: frankNO DOT SPAMschmitt AT 4sc DOT com