Forum: Ruby ruby 1.9 splat in return statement, bug or feature?

Announcement (2017-05-07): www.ruby-forum.com is now read-only since I unfortunately do not have the time to support and maintain the forum any more. Please see rubyonrails.org/community and ruby-lang.org/en/community for other Rails- und Ruby-related community platforms.
Gary W. (Guest)
on 2007-02-17 05:37
(Received via mailing list)
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 W.
Peña, Botp (Guest)
on 2007-02-17 06:03
(Received via mailing list)
From: Gary W. [mailto:removed_email_address@domain.invalid]
# 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
Charles L. (Guest)
on 2007-02-17 06:58
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.
Yukihiro M. (Guest)
on 2007-02-17 12:17
(Received via mailing list)
Hi,

In message "Re: ruby 1.9 splat in return statement, bug or feature?"
    on Sat, 17 Feb 2007 12:36:20 +0900, Gary W. 
<removed_email_address@domain.invalid>
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.
Macario O. (Guest)
on 2009-06-03 10:30
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 M. 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 W. <removed_email_address@domain.invalid>
> 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.
This topic is locked and can not be replied to.