Bug #6037
closed
Added by ddebernardy (Denis de Bernardy) almost 13 years ago.
Updated about 12 years ago.
Description
freeze should deep freeze, to avoid inconsistent behavior:
array = ['a', 'b'].freeze
array[0] = 'b'
array[0].gsub!(/.+/s, 'b')
array
RUBY_VERSION
=> "1.9.3"
array = ['a', 'b'].freeze
=> ["a", "b"]
array[0] = 'b'
RuntimeError: can't modify frozen Array
from (irb):269:in []=' from (irb):269 from /opt/local/bin/irb:12:in
'
array[0].gsub!(/.+/s, 'b')
=> "b"
array
=> ["b", "b"]
- Status changed from Open to Rejected
Rejecting, as this is per spec. Behavior can not be changed without breaking a lot of code.
Note that I also would like a deep freeze (see http://bugs.ruby-lang.org/issues/show/2509 ) but that is a feature request, not a bug report.
Adding a note in case someone new to ruby ever wonders why it got rejected.
>> array = ['a', 'b'].freeze
=> ["a", "b"]
>> puts array.map { |o| o.object_id }
70282007609720
70282007609700
=> nil
>> array[0].gsub!(/.+/s, 'b')
=> "b"
>> puts array.map { |o| o.object_id }
70282007609720
70282007609700
=> nil
Also available in: Atom
PDF
Like0
Like0Like0