class Hash def destruct(&block) keys = block.parameters.map{|a| a[1]} block.call(*self.values_at(*keys)) end end h = { a: 10, foo: 'bar', c: true } h.destruct { |foo, a| puts "foo: #{foo} a: #{a}" # => foo: bar a: 10 }