Issue #10708 has been updated by David Unric. By my subjective opinion I don't find this a bug but a feature. > 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 Here you define a method without a (keyword) argument placeholder so it does not expect a Hash argument, which is effectively used to pass keyword arguments at method call, even when keyword arguments are empty. Note calling `foo(kwarg: 'value')` is just a syntactic sugar to `foo({kwarg: 'value'})`. Methods unlike procs do check arguments count, so ArgumentError exception is the correct behavior. This is an expected difference to expanding an Array, which results in *plain arguments list* which can result in *"nothing"*, ie. an empty list. `foo(*[])` is interpreted as `foo()` so you won't get an error. You probably assume expanding a Hash, ie. applying double-splat operator on empty Hash instance at method call would behave the same way. However implementing such a special corner-case behavior would only introduce inconsistency in the language or would require implementing a *quite new different type of plain list* like *"plain keyword arguments list"*. ---------------------------------------- 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-50867 * 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/