Actions
Bug #17481
closedKeyword arguments change value after calling super without arguments in Ruby 3.0
Status:
Closed
Assignee:
-
Target version:
-
ruby -v:
ruby 3.0.0p0 (2020-12-25 revision 95aff21468) [x86_64-darwin19]
Description
There seems to be a bug in Ruby 3.0 regarding keyword arguments and calling super without arguments, where the splatted variable changes its value after super is called. The following self-contained example reproduces the issue:
class BaseTest
def call(a:, b:, **)
end
end
class Test < BaseTest
def call(a:, b:, **options)
p options
super
p options
end
end
Test.new.call(a: 1, b: 2, c: {})
{:c=>{}}
{:c=>{}, :a=>1, :b=>2}
We can see that the options
variable changed value to all keyword arguments after super
was called. This doesn't happen when explicitly passing arguments to super
, i.e. super(a: a, b: b, **options)
.
Updated by nobu (Nobuyoshi Nakada) almost 4 years ago
Bisect resulted in d2c41b1bff1f3102544bb0d03d4e82356d034d33.
Updated by nobu (Nobuyoshi Nakada) almost 4 years ago
- Status changed from Open to Closed
Applied in changeset git|c8010fcec016ee89aa0c45fe31094b2db0023e5c.
Dup kwrest hash when merging other keyword arguments [Bug #17481]
Actions
Like0
Like0Like0