Actions
Bug #19526
closedRails Active Support behavior change since e87d0882910001ef3b0c2ccd43bf00cee8c34a0c
Status:
Closed
Assignee:
-
Target version:
-
ruby -v:
ruby 3.3.0dev (2023-03-06T06:03:06Z master e87d088291) [x86_64-linux]
Description
This issue has been opened while investigating Rails issue https://github.com/rails/rails/issues/47627#issuecomment-1464724436
Steps to reproduce¶
- Run this script saves as diag47627.rb
options = { hello: "world" }
def test(opts) = opts
puts test(*[], **options).equal?(options)
Expected behavior¶
It returns false
as Ruby 3.2.1 and Ruby 3.3.0dev 0463c5806a does
$ ruby -v
ruby 3.3.0dev (2023-03-06T05:52:46Z master 0463c5806a) [x86_64-linux]
$ ruby diag47627.rb
false
$
$ ruby -v
ruby 3.2.1 (2023-02-08 revision 31819e82c8) [x86_64-linux]
$ ruby diag47627.rb
false
Actual behavior¶
It returns true
$ ruby -v
ruby 3.3.0dev (2023-03-06T06:03:06Z master e87d088291) [x86_64-linux]
$ ruby diag47627.rb
true
Workaround¶
Duplicate the value inside the method that restores the original behavior.
- another_diag47627.rb
options = { hello: "world" }
def test(opts) = opts.dup
puts test(*[], **options).equal?(options)
$ ruby -v
ruby 3.3.0dev (2023-03-06T05:52:46Z master 0463c5806a) [x86_64-linux]
$ ruby another_diag47627.rb
false
$
At the Rails side, reverting https://github.com/rails/rails/commit/9e4ff29f748b05c3a949f0d75167950039b6cda8
can also workaround it.
Updated by ko1 (Koichi Sasada) almost 2 years ago
- Status changed from Open to Closed
It was a bug. fixed https://github.com/ruby/ruby/pull/7507
Thank you!
Actions
Like0
Like0