Ruby 1.9 splat in return statement, bug or feature?

What's going on with splat in 1.9?

$ ruby -e 'def foo; return *[1]; end; p foo'
1

$ ruby-1.9 -e 'def foo; return *[1]; end; p foo'
[1]

Gary Wright

# What's going on with splat in 1.9?
# $ ruby -e 'def foo; return *[1]; end; p foo'
# 1
# $ ruby-1.9 -e 'def foo; return *[1]; end; p foo'
# [1]

consistency perhaps?

r@pc4all:~# ruby -e 'def foo; return *[1]; end; p foo'
1
r@pc4all:~# ruby -e 'def foo; return *[1,2]; end; p foo'
[1, 2]

kind regards -botp

···

From: Gary Wright [mailto:gwtmp01@mac.com]

Hi,

···

In message "Re: ruby 1.9 splat in return statement, bug or feature?" on Sat, 17 Feb 2007 12:36:20 +0900, Gary Wright <gwtmp01@mac.com> writes:

What's going on with splat in 1.9?

$ ruby -e 'def foo; return *[1]; end; p foo'
1

$ ruby-1.9 -e 'def foo; return *[1]; end; p foo'
[1]

In 1.9, values (i.e. result of splat) are always represented by array,
so that we won't confuse array as an value with array as values
representation.

              matz.

Peña, Botp wrote:

...

consistency perhaps?

r@pc4all:~# ruby -e 'def foo; return *[1]; end; p foo'
1
r@pc4all:~# ruby -e 'def foo; return *[1,2]; end; p foo'
[1, 2]

kind regards -botp

It seems somehow less consistent when viewed another way though. I think
splatting a literal array should be equivalent to having written a plain
comma-delimited list:

  def bar(*args); end

  bar 1
  bar(*[1])
  bar 1, 2
  bar(*[1, 2])

In which case, for return:

  return *[1] => return 1 => 1
  return *[1, 2] => return 1, 2 => [1, 2]

Its not going to really bother me at any rate though.

···

--
Posted via http://www.ruby-forum.com/\.

Men thats a real bummer, i love "peeling" arrays like this:

a = *[1] #=> 1
a = *[1,2] # => [1,2]

Some of my code is gonna break.

Yukihiro Matsumoto wrote:

···

Hi,

In message "Re: ruby 1.9 splat in return statement, bug or feature?" > on Sat, 17 Feb 2007 12:36:20 +0900, Gary Wright <gwtmp01@mac.com> > writes:

>What's going on with splat in 1.9?
>
>$ ruby -e 'def foo; return *[1]; end; p foo'
>1
>
>$ ruby-1.9 -e 'def foo; return *[1]; end; p foo'
>[1]

In 1.9, values (i.e. result of splat) are always represented by array,
so that we won't confuse array as an value with array as values
representation.

              matz.

--
Posted via http://www.ruby-forum.com/\.