Allow Object#clone to take freeze: false keyword argument to not freeze the clone
This allows Object#clone to not freeze the resulting object, which fixes a long standing problem in ruby in that you cannot get an unfrozen copy of an object that includes a copy of the object's singleton class. Previously, clone always returned a frozen object, and dup did not copy the singleton class. This adds the ability to get an unfrozen clone of an object that includes a copy of the object's singleton class, allowing further modification.
Among other things, this allows the ability to create modified clones of objects that have singleton classes:
class A def clone(arg) obj = super(freeze: false) # modify obj based on arg obj.freeze end end
I think this is a simpler and more flexible approach to the same problem that #12092 tries to solve.
Object#clone with freeze: false [Feature #12300]
* object.c (rb_obj_clone2): Allow Object#clone to take freeze: false keyword argument to not freeze the clone. [Feature #12300] * test/ruby/test_object.rb (TestObject): test for it.
object.c: restrict freeze option
- object.c (rb_obj_clone2): restrict freeze option to true other than false which only has the effect. [Feature #12300]
#3 Updated by shyouhei (Shyouhei Urabe) 8 months ago
- Status changed from Open to Closed