From: 6ftdan@... Date: 2015-12-05T04:53:25+00:00 Subject: [ruby-core:71841] [Ruby trunk - Feature #10930] Allow splat operator to work for string interpolation Issue #10930 has been updated by Daniel P. Clark. ~~~ruby class Example def method_missing m, *a puts "Method #{m} called with arguments ", *a end end Example.new.foo :bar, :baz #Method foo called with arguments #bar #baz class Example def method_missing m, *a puts "Method #{m} called with arguments #{a}" end end Example.new.foo :bar, :baz #Method foo called with arguments [:bar, :baz] ~~~ Neither of these are the desired behavior. It ends up needing to be implemented like this. ~~~ruby class Example def method_missing m, *a puts "Method #{m} called with arguments #{a.to_s[1..-2]}" end end Example.new.foo :bar, :baz #Method foo called with arguments :bar, :baz ~~~ ---------------------------------------- Feature #10930: Allow splat operator to work for string interpolation https://bugs.ruby-lang.org/issues/10930#change-55245 * 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/