Actions
Bug #15052
closedmust not optimize `foo(**{})` out
Description
A keyword rest argument with empty hash, **{}
, is removed during parsing phase. However, under the current spec of keyword parameters, this leads to a problem:
def foo(opt = "opt", **hsh)
p [opt, hsh]
end
foo({}, **{}) #=> expected: [{}, {}], actual: ["opt", {}]
foo({}, **{})
is obviously expected to pass the first {}
to opt
, and the second **{}
to **hsh
. However, **{}
is removed at parsing phase, sp the first {}
is considered as a keyword rest argument, which causes the above strange result.
So, we cannot optimize **{}
out, unless keyword argument is separated from normal arguments #14183. (The current spec is really intractable not only for Ruby users but also for Ruby developers!)
Files
Actions
Like0
Like0Like0Like0