Actions
Bug #11860
closedDouble splat does not work on empty hash assigned via variable
Status:
Closed
Assignee:
-
Target version:
-
ruby -v:
2.3.0preview2 (2015-12-11 trunk 53028) [x86_64-linux]
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)
Updated by sawa (Tsuyoshi Sawada) about 9 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) almost 9 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) almost 9 years ago
This bug is related to #10708.
Updated by nobu (Nobuyoshi Nakada) over 8 years ago
- Description updated (diff)
Updated by jeremyevans0 (Jeremy Evans) over 5 years ago
- Related to Feature #14183: "Real" keyword argument added
Updated by jeremyevans0 (Jeremy Evans) over 5 years 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.
Actions
Like0
Like0Like0Like0Like0Like0Like0Like0