From: "jeremyevans0 (Jeremy Evans)" Date: 2022-04-10T05:10:41+00:00 Subject: [ruby-core:108205] [Ruby master Bug#18688] when array's default value is empty hash adding a hash key value changes all array elements 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: