From: mame@... Date: 2018-09-15T01:08:20+00:00 Subject: [ruby-core:89021] [Ruby trunk Bug#15078] Hash splat of empty hash should not create a positional argument. Issue #15078 has been updated by mame (Yusuke Endoh). marcandre (Marc-Andre Lafortune) wrote: > I'm sorry if I sounded like I had a "complete" solution, since Akr-san is right, there is no such perfect semantics. Don't mind; I had considered your proposal in a few days, but I couldn't find the counterexample :-) The current semantics is just too complex. > > In Ruby 2.X, he said that `**empty_hash` should be just ignored, and that `foo({}, **{})` should be always equal to `foo({})`, even if `def foo(opt=42, **kw)` receives `opt=42`. (However, matz showed reluctance to this behavior. So, the solution for this ticket is not decided yet.) > > I'm glad he and I agree on the fact that is should be ignored most of the time. It could also not be ignored for methods that accept keyword parameters, which I believe is more logical and closer to what Ruby 3.0 would do. Yes. Your proposal looks the best semantics so far for Ruby 2.X, at least to me. Note that akr-san is also reasonable: from 2.0, a method call has always passed the same value array and a block, without depending upon the definition of the method, he said. Your proposal breaks the principle. (Honestly, I'm unsure if the principle is still valid or not. Too complex...) > Please consider my "vote" as in favor of half your proposal, and strong opposition to the other half :-) Did you see [my problem of the note 29 in #14183](https://bugs.ruby-lang.org/issues/14183#note-29)? Unfortunately, prohibiting the half does not solve the problem at all. ---------------------------------------- Bug #15078: Hash splat of empty hash should not create a positional argument. https://bugs.ruby-lang.org/issues/15078#change-74047 * 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: