From: ferdinandrosario@... Date: 2016-03-15T06:33:08+00:00 Subject: [ruby-core:74332] [Ruby trunk Feature#12092] Allow Object#clone to yield cloned object before freezing Issue #12092 has been updated by ferdinand rosario. Assignee set to ruby-core ---------------------------------------- Feature #12092: Allow Object#clone to yield cloned object before freezing https://bugs.ruby-lang.org/issues/12092#change-57456 * Author: Jeremy Evans * Status: Open * Priority: Normal * Assignee: ruby-core ---------------------------------------- This allows creating modified clones of frozen objects that have singleton classes: ~~~ a = [1,2,3] def a.fl; first + last; end a.freeze a.fl # => 4 clone = a.clone{|c| c << 10} clone.last # => 10 clone.fl # => 11 clone.frozen? # => true ~~~ Previously, this was not possible at all. If an object was frozen, the clone was frozen before the cloned object could be modified. It was possible to modify the clone using initialize_clone or initialize_copy, but you couldn't change how to modify the clone on a per-call basis. You couldn't use dup to return an unfrozen copy, modify it, and then freeze it, because dup doesn't copy singleton classes. This allows ruby to be used in a functional style with immutable data structures, while still keeping the advantages of singleton classes. ---Files-------------------------------- 0001-Allow-clone-to-yield-cloned-object-before-freezing.patch (2.51 KB) 0001-Allow-clone-to-take-a-second-argument-passed-to-init.patch (2.37 KB) -- https://bugs.ruby-lang.org/ Unsubscribe: