Issue #15078 has been updated by akr (Akira Tanaka).


akr (Akira Tanaka) wrote:

> In this behavior, following two should be same behavior (in Ruby 2.X), I think.
> 
> ```
> def f(*a, *kw) g(*a, *kw) end
> def f(*a) g(*a) end
> ```

Oops. ```def f(*a, *kw) g(*a, *kw) end``` was wrong.
I wanted to write ```def f(*a, **kw) g(*a, **kw) end```

Also, I forgot to describe about symbol/non-symbol key Hash splitting.

Symbol/non-symbol key Hash splitting breaks delegation with
```def f(*a, **kw) g(*a, **kw) end```.
It can be fixed with removing the Hash splitting, or
move the Hash splitting mechanism to caller from callee. 
I think former is more compatible.

I.e. following script should show `[{:a=>"b", 1=>2}]` twice.
(`a` in `g` should be `[{:a=>"b", 1=>2}]` and 
`kw` should be `nil`)

```
% ruby -e '
def f(*a) p a end
def g(*a, **kw) f(*a, **kw) end
f(a: "b", 1 => 2)
g(a: "b", 1 => 2)
'
[{:a=>"b", 1=>2}]
[{1=>2}, {:a=>"b"}]
```



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

* 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>