From: eregontp@... Date: 2020-03-19T00:57:40+00:00 Subject: [ruby-core:97541] [Ruby master Feature#16175] Object#clone(freeze: true) is inconsistent with Object#clone(freeze: false) Issue #16175 has been updated by Eregon (Benoit Daloze). I'm confused, I thought `clone(freeze: true)` would be the same as `clone()`, i.e., freeze the cloned object only if the original object was frozen. I don't think it's good to make #clone also #freeze if the original object was not frozen, that's a separate concern and out of #clone's role. I think `obj.clone.freeze` is good enough for that use case, much clearer, and more compatible (`#initialize_clone` doesn't need to deal with this) ---------------------------------------- Feature #16175: Object#clone(freeze: true) is inconsistent with Object#clone(freeze: false) https://bugs.ruby-lang.org/issues/16175#change-84700 * Author: zverok (Victor Shepelev) * Status: Open * Priority: Normal ---------------------------------------- In #12300, the new keyword `freeze:` was introduced, allowing this: ```ruby h = {}.freeze h.clone.frozen? # => true h.clone(freeze: false).frozen? # => false ``` Though, it turns to me that behavior is not symmetric: ```ruby h = {} h.frozen? # => false h.clone.frozen? # => false h.clone(freeze: true).frozen? # => false -- I expected true here! ``` I wonder, if it is "by design" and should be addressed in docs, or just an implementation inconsistency that can be fixed? ---Files-------------------------------- freeze-true.patch (1.47 KB) clone-freeze-true-16175.patch (4.42 KB) -- https://bugs.ruby-lang.org/ Unsubscribe: