Project

General

Profile

Bug #11860

Double splat does not work on empty hash assigned via variable

Added by sawa (Tsuyoshi Sawada) almost 4 years ago. Updated about 2 months ago.

Status:
Closed
Priority:
Normal
Assignee:
-
Target version:
-
ruby -v:
2.3.0preview2 (2015-12-11 trunk 53028) [x86_64-linux]
[ruby-core:72429]

Description

When an empty hash is given as a literal, the double splat operates on it, and leaves nothing, which is expected.

class String
  def foo; end
end

[**{}] # => []
"foo".foo(**{}) # => nil
"foo".send("foo", **{}) # => nil

However, when an empty hash is given via variable, the double splat retains an empty hash in place.

h = {}

[**h] # => [{}]
"foo".foo(**h) # => wrong number of arguments (given 1, expected 0)
"foo".send("foo", **h) # => wrong number of arguments (given 1, expected 0)

Related issues

Related to Ruby master - Feature #14183: "Real" keyword argumentClosedActions

History

Updated by sawa (Tsuyoshi Sawada) almost 4 years ago

I found more cases (other than via variable) that the double splat does not work on an empty hash. While parenthesis or nesting does not cause the issue:

[**({})] # => []
[**begin {} end] # => []
[**{**{}}] # => []

more complicated expressions seem to cause the issue:

[**({} if true)] # => [{}]
[**(if true; {} end)] # => [{}]
[**(false ? :foo : {})] # => [{}]

Updated by justcolin (Colin Fulton) over 3 years ago

A similar bug happens when using the double splat operator in the parameter list of a method definition. See #12022.

Updated by sawa (Tsuyoshi Sawada) over 3 years ago

This bug is related to #10708.

Updated by nobu (Nobuyoshi Nakada) over 3 years ago

  • Description updated (diff)
#5

Updated by sawa (Tsuyoshi Sawada) 7 months ago

  • Description updated (diff)
#6

Updated by jeremyevans0 (Jeremy Evans) 4 months ago

Updated by jeremyevans0 (Jeremy Evans) about 2 months ago

  • Status changed from Open to Closed

With recent commits to the master branch, keyword splats of empty hashes do not pass positional arguments to methods or cause an empty hash to be added to an array.

Also available in: Atom PDF