From: merch-redmine@... Date: 2019-09-21T20:26:52+00:00 Subject: [ruby-core:95022] [Ruby master Feature#16175] Make Object#clone(freeze: true) return frozen clone even if receiver is not frozen Issue #16175 has been updated by jeremyevans0 (Jeremy Evans). Backport deleted (2.5: UNKNOWN, 2.6: UNKNOWN) Subject changed from Object#clone(freeze: true) to Make Object#clone(freeze: true) return frozen clone even if receiver is not frozen Tracker changed from Bug to Feature The `freeze: false` option was intended to be: "do not freeze clone if receiver is already frozen". The `Object#clone` documentation states: "#clone copies the frozen (unless `:freeze` keyword argument is given with a false value) and tainted state of obj". The behavior when `freeze: true` is provided is therefore unspecified, and therefore, I do not think this should be considered a bug. The reason `freeze: false` was introduced is because you previously could not use `clone` with frozen objects with singleton classes/extended modules and keep the ability to modify copies of the frozen objects. Adding `freeze: false` made something previously impossible in Ruby possible. Adding `freeze: true` for consistency doesn't enable new behavior, as you can use `clone.freeze` instead of `clone(freeze: true)`. That being said, I'm not opposed to `freeze: true` being supported. ---------------------------------------- Feature #16175: Make Object#clone(freeze: true) return frozen clone even if receiver is not frozen https://bugs.ruby-lang.org/issues/16175#change-81649 * Author: zverok (Victor Shepelev) * Status: Open * Priority: Normal * Assignee: * Target version: ---------------------------------------- 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? -- https://bugs.ruby-lang.org/ Unsubscribe: