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.
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?