[ruby-core:108205] [Ruby master Bug#18688] when array's default value is empty hash adding a hash key value changes all array elements
From:
"jeremyevans0 (Jeremy Evans)" <noreply@...>
Date:
2022-04-10 05:10:41 UTC
List:
ruby-core #108205
Issue #18688 has been updated by jeremyevans0 (Jeremy Evans).
Status changed from Open to Rejected
This is expected behavior and not a bug. As you mentioned, you want to use the block form if you want a new object for each default value.
----------------------------------------
Bug #18688: when array's default value is empty hash adding a hash key value changes all array elements
https://bugs.ruby-lang.org/issues/18688#change-97189
* Author: pan (Pan Pan)
* Status: Rejected
* Priority: Normal
* ruby -v: ruby 3.0.0p0 (2020-12-25 revision 95aff21468) [x86_64-linux]
* Backport: 2.6: UNKNOWN, 2.7: UNKNOWN, 3.0: UNKNOWN, 3.1: UNKNOWN
----------------------------------------
```ruby
ah = Array.new(3, {})
ah[1][:foo] = 'bar'
p ah # [{:foo=>"bar"}, {:foo=>"bar"}, {:foo=>"bar"}]
```
This is not expected result. The expected result is `[{}, {:foo=>"bar"}, {}]`.
Alternatively, below code works as expected.
```ruby
ah = Array.new(3) {{}}
ah[1][:foo] = 'bar'
p ah # [{}, {:foo=>"bar"}, {}]
--
https://bugs.ruby-lang.org/
Unsubscribe: <mailto:[email protected]?subject=unsubscribe>
<http://lists.ruby-lang.org/cgi-bin/mailman/options/ruby-core>