String freeze

Hey all,

So I'm trying to freeze a class variable, and I discover that Object#freeze
breaks down every time on my machine. Even with simple strings.

irb(main):001:0> test = "good"
=> "good"
irb(main):002:0> test.freeze
=> "good"
irb(main):003:0> test.frozen?
=> true
irb(main):004:0> test = "bad"
=> "bad"
irb(main):005:0> test.frozen?
=> false

What gives?

I must be missing something.

fiery

You are missing the difference between a variable and an object.

test = "good"

test is a local variable which references a string object.

test.freeze?

This freezes the object referenced by test.

test = "bad"
this makes the variable test refer to an entirely different string.

For another thing to ponder try this:

test = "good"
test.freeze

another_variable = test
another_variable.frozen? => true

The point is that you can't freeze variables.

This distinction between variables and the objects they reference is
a stumbling block for many people coming to Ruby if they haven't been
exposed to other languages in the family.

···

On 4/23/07, Stephen Smith <4fires@gmail.com> wrote:

Hey all,

So I'm trying to freeze a class variable, and I discover that Object#freeze
breaks down every time on my machine. Even with simple strings.

irb(main):001:0> test = "good"
=> "good"
irb(main):002:0> test.freeze
=> "good"
irb(main):003:0> test.frozen?
=> true
irb(main):004:0> test = "bad"
=> "bad"
irb(main):005:0> test.frozen?
=> false

What gives?

I must be missing something.

--
Rick DeNatale

My blog on Ruby
http://talklikeaduck.denhaven2.com/

Try altering it instead of reassigning it.
I think this is a little more like what you expected.
Not exactly, but you can see freezing.

test = "good"
p test
test.freeze
p test
p test.frozen?

test << "bad"
p test
p test.frozen?

Harry

···

On 4/24/07, Stephen Smith <4fires@gmail.com> wrote:

Hey all,

So I'm trying to freeze a class variable, and I discover that Object#freeze
breaks down every time on my machine. Even with simple strings.

fiery

--

A Look into Japanese Ruby List in English

test references two different objects.. try this....

test = "good"
test.freeze
test.object_id

test = "bad"
test.object_id

You will notice different object_id's in the first and later case.

-abhijit

···

On 4/24/07, Harry <ruby.hardware@gmail.com> wrote:

On 4/24/07, Stephen Smith <4fires@gmail.com> wrote:
> Hey all,
>
> So I'm trying to freeze a class variable, and I discover that Object#freeze
> breaks down every time on my machine. Even with simple strings.
>
> fiery
>

Try altering it instead of reassigning it.
I think this is a little more like what you expected.
Not exactly, but you can see freezing.

test = "good"
p test
test.freeze
p test
p test.frozen?

test << "bad"
p test
p test.frozen?

Harry

--
http://www.kakueki.com/ruby/list.html
A Look into Japanese Ruby List in English

--

अभिजीत

[written in http://www.paahijen.com/scratchpad\]

[http://www.paahijen.com]