Issue #15078 has been updated by mame (Yusuke Endoh).


akr (Akira Tanaka) wrote:
> How about def `m(**kw) end` binds kw to nil if the last Hash argument is not taken as keyword arguments and
> `m(**{})` add {} and `m(**nil)` don't add anything to arguments.

I agree that it is one of the reasonable design choices, but does it break the following code?

```
def foo(**kw)
  kw[:key]
end

foo()
```

Applying it in Ruby 2.X would bring a big incompatibility issue, I guess.  Rather, it might be worse than separation of keyword argument because the incompatibility is data-dependent: it can not always be fixed syntactically.

```
def foo(**kw)
  @option = kw
end

...

def bar
  @option[:key] #=> Null pointer
end
```

----------------------------------------
Bug #15078: Hash splat of empty hash should not create a positional argument.
https://bugs.ruby-lang.org/issues/15078#change-74074

* Author: marcandre (Marc-Andre Lafortune)
* Status: Open
* Priority: Normal
* Assignee: matz (Yukihiro Matsumoto)
* Target version: 
* ruby -v: ruby 2.6.0dev (2018-08-27 trunk 64545) [x86_64-darwin15]
* Backport: 2.3: UNKNOWN, 2.4: UNKNOWN, 2.5: UNKNOWN
----------------------------------------
Looks like #10856 is not completely fixed, but I can't reopen it

```
def foo(*args); args; end
foo(**{}) # => []
foo(**Hash.new) # => [{}], should be []
```



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

Unsubscribe: <mailto:ruby-core-request / ruby-lang.org?subject=unsubscribe>
<http://lists.ruby-lang.org/cgi-bin/mailman/options/ruby-core>