Bug #17735
closed`Hash#transform_keys!` drops non evaluated keys
Description
hash = {a: 1, b: 2, c: 3}
hash.transform_values!(){ raise } rescue
p hash #=> {:a=>1, :b=>2, :c=>3}
hash = {a: 1, b: 2, c: 3}
hash.transform_keys!(){ raise } rescue
p hash #=> {}
Is this an intentional behavior?
I expected behavior like transform_values!
in transform_keys!
(Keeping non evaluated key-value pairs when exiting the block).
Updated by nobu (Nobuyoshi Nakada) almost 4 years ago
These are just a bug, not a spec.
ruby_version_is ""..."2.5.1" do
it "partially modifies the contents if we broke from the block" do
@hash.transform_keys! do |v|
break if v == :c
v.succ
end
@hash.should == { c: 1, d: 4 }
end
end
ruby_version_is "2.5.1" do
it "returns the processed keys if we broke from the block" do
@hash.transform_keys! do |v|
break if v == :c
v.succ
end
@hash.should == { b: 1, c: 2 }
end
end
Updated by kachick (Kenichi Kamiya) over 3 years ago
- Status changed from Open to Closed
Applied in changeset git|31e0382723bfb35cffe3ca485dd0577668cafa07.
Keep non evaluated keys in Hash#transform_keys!
[Bug #17735]
Updated by nagachika (Tomoyuki Chikanaga) over 3 years ago
- Backport changed from 2.5: UNKNOWN, 2.6: UNKNOWN, 2.7: UNKNOWN, 3.0: UNKNOWN to 2.5: UNKNOWN, 2.6: REQUIRED, 2.7: REQUIRED, 3.0: REQUIRED
I have confirmed that the issue is reproducible on 2.6/2.7 too.
Updated by nagachika (Tomoyuki Chikanaga) over 3 years ago
- Backport changed from 2.5: UNKNOWN, 2.6: REQUIRED, 2.7: REQUIRED, 3.0: REQUIRED to 2.5: UNKNOWN, 2.6: REQUIRED, 2.7: REQUIRED, 3.0: DONE
ruby_3_0 84d9a9afc0b49d095541acb9832f8b12fb506e19 merged revision(s) 31e0382723bfb35cffe3ca485dd0577668cafa07,5e5fb72f99701dc27c66ab148471893f14e6d6f0,fb6ebe55d91187d9635e0183d47dbf38e95b1141,522d4cd32f7727886f4fcbc28ed29c08d361ee20.
Updated by nagachika (Tomoyuki Chikanaga) over 3 years ago
- Backport changed from 2.5: UNKNOWN, 2.6: REQUIRED, 2.7: REQUIRED, 3.0: DONE to 2.6: REQUIRED, 2.7: REQUIRED, 3.0: REQUIRED
522d4cd32f7727886f4fcbc28ed29c08d361ee20 was reverted at bb84c75001f1bf13b4b2a12db8f4420e76a3ea03. Should I backport it into ruby_3_0?
Updated by nagachika (Tomoyuki Chikanaga) over 3 years ago
- Backport changed from 2.6: REQUIRED, 2.7: REQUIRED, 3.0: REQUIRED to 2.6: REQUIRED, 2.7: REQUIRED, 3.0: DONE
Additionally backported bb84c75001f1bf13b4b2a12db8f4420e76a3ea03 into ruby_3_0 at 98ac62de5cb03efec0fb32684c61c0d4df692e5a.