From: mame@... Date: 2018-09-18T00:08:16+00:00 Subject: [ruby-core:89048] [Ruby trunk Bug#15078] Hash splat of empty hash should not create a positional argument. 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: