Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Keyword arguments unpacking (splat) in Ruby

What is happening below seems a little strange to me.

def f(a, b)
  puts "#{a} :: #{b}"
end

f(*[1, 2], **{}) # prints "1 :: 2"

hash = {}
f(*[1, 2], **hash)
ArgumentError: wrong number of arguments (3 for 2)

f(*[1, 2], **Hash.new)
ArgumentError: wrong number of arguments (3 for 2)

Is this a compiler optimization feature?

like image 374
Vlad Nikiporoff Avatar asked Mar 17 '17 03:03

Vlad Nikiporoff


Video Answer


1 Answers

That is a Ruby's bug that has been reported several times (for example here by me) but has not been fixed.

I guess that since the keyword argument feature has been introduced, the double splat syntax has become murky, and that is the indirect cause of this bug. I heard that Matz is considering of introducing a new syntax in some future version of Ruby to distinguish hashes and keyword arguments.

like image 188
sawa Avatar answered Oct 02 '22 12:10

sawa