Issue #10708 has been updated by Kolja Kube.


Just to inform everyone, this issue stems from [this post on Stack Overflow](http://stackoverflow.com/questions/27821422/how-can-i-collapse-double-splat-arguments-into-nothing).

Also, I have now idea how the ruby parser works, so if increased parsing complexity is the reason for the discussed behavior, I'm happy to concede my point.

Why I think the current behavior is weird, take these forwarders:

    def call_args(method, *args); send(method, *args); end
    def call_kwargs(method, **opts); send(method, **opts); end

This obviously works:

    def one_arg(arg); end
    def one_kwarg(opt:); end
    
    call_args(:one_arg, 0) # fine
    call_kwargs(:one_kwargs, opt: 0) # also fine

But here the behavior differs:

    def zero_args(); end
    def zero_kwargs(); end
    
    call_args(:zero_args) # fine
    call_kwargs(:zero_kwargs) # error

Now, this is not a problem per se, since the single-splat syntax also permits fowarding keyword arguments. But this simply tripped me up, and since one of Ruby's principles is the principle of least surprise, I look forward to hearing your opinions.

----------------------------------------
Bug #10708: In a function call, double splat of an empty hash still calls the function with an argument
https://bugs.ruby-lang.org/issues/10708#change-50868

* Author: Damien Robert
* Status: Open
* Priority: Normal
* Assignee: 
* Category: 
* Target version: 
* ruby -v: ruby 2.2.0p0 (2014-12-25 revision 49005) [x86_64-linux]
* Backport: 2.0.0: UNKNOWN, 2.1: UNKNOWN, 2.2: UNKNOWN
----------------------------------------
Consider this:
    def foo; end
    foo(*[]) #Splatting an empty list is ok
    foo(**{}) #Double splatting an empty hash is like calling foo({}) which gives an error

This is annoying in a function that is a wrapper around another function and just process some keywords:
    def wrapper(*args, keyword: true, **others)
      puts keyword
      wrappee(*args,**others) #here this code will fail if others is empty
    end



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