Issue #8507 has been updated by Stephen Celis.


Another issue with keyword args and consistency with args:

- *args are immutable
- **kwargs are mutable

def splat *args
  args << 'foobar'
end
arr = []
splat(*arr)
arr # => []

def double_splat **kwargs
  kwargs[:foo] = 'bar'
end
hash = {}
double_splat(**hash)
hash # => {:foo=>"bar"}

----------------------------------------
Bug #8507: Keyword splat does not convert arg to Hash
https://bugs.ruby-lang.org/issues/8507#change-47837

* Author: Stephen Celis
* Status: Feedback
* Priority: Normal
* Assignee: Yukihiro Matsumoto
* Category: syntax
* Target version: current: 2.2.0
* ruby -v: ruby 2.0.0p195 (2013-05-14 revision 40734) [x86_64-darwin12.3.0]
* Backport: 1.9.3: UNKNOWN, 2.0.0: UNKNOWN
----------------------------------------
=begin
A single splat is useful to convert an object to an array as it passes from one method to the next, so I expected the double-splat to do the same and convert the object to a hash.

  def splat *args
    p args
  end
  def double_splat **kwargs
    p args
  end
  splat(*nil)  # []
  splat(**nil) # TypeError: no implicit conversion of nil into Hash

For the sake of consistency, wouldn't it make sense to wrap the double-splatted arg with (({Hash()})) the same way a single-splatted arg is wrapped with (({Array()}))?
=end


---Files--------------------------------
to-hash-kwarg.patch (939 Bytes)


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