[ruby-core:76995] [Ruby trunk Bug#10856] Splat with empty keyword args gives unexpected results
From:
guyren@...
Date:
2016-08-21 06:09:05 UTC
List:
ruby-core #76995
Issue #10856 has been updated by Guyren Howe.
I believe this behavior is wrong and should be fixed.
This gets in the way of simple functional programming idioms. eg "Call each of these functions with these args until one doesn't fail"
~~~ ruby
class FnSeries
def initialize(*fns)
@fns = fns
end
def call(*args, **kwargs)
@fns.each do |fn|
begin
return fn.call(*args, **kwargs)
rescue Exception => e
end
end
end
~~~
If one of the fns takes no args, this will fail even if that function would otherwise succeed.
----------------------------------------
Bug #10856: Splat with empty keyword args gives unexpected results
https://bugs.ruby-lang.org/issues/10856#change-60219
* Author: Sean Griffin
* Status: Open
* Priority: Normal
* Assignee:
* ruby -v: ruby 2.2.0p0 (2014-12-25 revision 49005) [x86_64-darwin13]
* Backport: 2.0.0: UNKNOWN, 2.1: UNKNOWN, 2.2: UNKNOWN
----------------------------------------
When keyword args are passed to a method with splat, and there are no keyword args, an empty hash is sent. I would expect no argument to be given, same as splat with an empty array. For example:
def foo
end
foo(**{})
This causes an argument error, as an empty hash is passed. I would expect the same behavior as
def foo
end
foo(*[])
--
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>