Hash Destructuring

hash, ruby, splat

Solution

It's 2018 and this deserves an update. Ruby 2.0 introduced keyword arguments and with that also the hash splat operator `**`. Now you can simply do the following:

def foo(arg1, opts)
  [arg1, opts]
end

opts = {hash2: 'bar', hash3: 'baz'}
foo('arg1', hash1: 'foo', **opts)
#=> ["arg1", {:hash1=>"foo", :hash2=>"bar", :hash3=>"baz"}]

Problem

You can destructure an array by using the splat operator. ``` def foo(arg1, arg2, arg3) #...Do Stuff... end array = ['arg2', 'arg3'] foo('arg1', *array) ``` But is there a way to destruct a hash for option type goodness? ``` def foo(arg1, opts) #...Do Stuff with an opts hash... end opts = {hash2: 'bar', hash3: 'baz'} foo('arg1', hash1: 'foo', *opts) ``` If not native ruby, has Rails added something like this? Currently I'm doing roughly this with ``` foo('arg1', opts.merge(hash1: 'foo')) ```

Original source