From: Jeremy Bopp Date: 2010-10-15T00:21:23+09:00 Subject: Re: Freeze method doesn't work On 10/14/2010 10:00 AM, Sergey U. wrote: > Freeze should prevent further modifications to 'var'... > > mac-undrgrnd:~ yspro$ irb > ruby-1.9.2-p0 > var = 4 > => 4 > ruby-1.9.2-p0 > var.frozen? > => false > ruby-1.9.2-p0 > var.freeze > => 4 > ruby-1.9.2-p0 > var.frozen? > => true > ruby-1.9.2-p0 > var = 5 > => 5 > ruby-1.9.2-p0 > var.frozen? > => false > ruby-1.9.2-p0 > > > What's wrong? The freeze method doesn't operate on var itself. It operates on the object that var references, so the Fixnum object for 4 was frozen in your test. However, you are allowed to replace that object with another any time you please. The freeze method only prevents you from changing the object itself: irb(main):001:0> var = 'abc123' => "abc123" irb(main):002:0> var.frozen? => false irb(main):003:0> var.freeze => "abc123" irb(main):004:0> var.frozen? => true irb(main):005:0> var.sub!(/\d/, 'n') TypeError: can't modify frozen string from (irb):5:in `sub!' from (irb):5 from :0 irb(main):006:0> var => "abc123" irb(main):007:0> var = 'abcn23' => "abcn23" irb(main):008:0> var.frozen? => false -Jeremy