Issue #10930 has been updated by Yukihiro Matsumoto.

Subject changed from Allow splat ooperator to work for string interpolation to Allow splat operator to work for string interpolation
Status changed from Open to Feedback

I have no idea why you need this. Does this have common use-case?
For me, "#{*[1,2,3]}" to produce "1, 2, 3" is kinda arbitrary.

Matz.


----------------------------------------
Feature #10930: Allow splat operator to work for string interpolation
https://bugs.ruby-lang.org/issues/10930#change-51751

* Author: Daniel P. Clark
* Status: Feedback
* Priority: Normal
* Assignee: 
----------------------------------------
Currently when you use the splat operator in a method it pulls the items out of the array for method parameters.

~~~ruby
def foo(a,b,c)
  puts "#{a}, #{b}, #{c}"
end

bar = [1,2,3]
foo(*bar)
# => "1, 2, 3"
~~~

So I would expect to be able to do "#{*bar}" and get either "1, 2, 3" or "1,2,3".  But when attempting this I get.

~~~ruby
baz = [1,2,3]

"#{*baz}"

# SyntaxError: (irb):53: syntax error, unexpected tSTRING_DEND, expecting '='
# "#{*baz}"
#         ^
# (irb):53: unterminated string meets end of file

"#{*[1,2,3]}"

# SyntaxError: (irb):54: syntax error, unexpected tSTRING_DEND, expecting :: or '[' or '.'
# "#{*[1,2,3]}"
#             ^
# (irb):54: unterminated string meets end of file
~~~

This doesn't work on any of the Ruby versions available 1.8 through 2.2.1.  They each produce the same error.

I propose allowing the splat operator within string interpolation to work the same as [1,2,3].join(',')

~~~ruby
fiz = [1,2,3]

"#{*fiz}"
# => "1,2,3"

"#{*[1,2,3]}"
# => "1,2,3"
~~~



-- 
https://bugs.ruby-lang.org/