R
Ralph Shnelvar
Note that I am new to this list and to Ruby.
Consider ...
irb(main):020:0> c=[0,1]
=> [0, 1]
irb(main):021:0> c[0].freeze
=> 0
irb(main):022:0> c[0]=2
=> 2
irb(main):023:0> c
=> [2, 1]
irb(main):024:0>
Similarly ...
irb(main):029:0> f=1
=> 1
irb(main):030:0> f.freeze
=> 1
irb(main):031:0> f=2
=> 2
It took a few moments for me to scratch my head and then I thought
that the reason that there was no message when c[0] or f changed was that
c[0] is not an object but a reference to an object (the number 2).
So I searched the archives and it appears taht my reasoning is
correct. I think.
there was the suggestion to make f a constant, F. Yes, that generates
a warning ... but it is not what I want. I want to freeze the
reference as well as the object.
In C++ it is possible to "freeze" (i.e. const) both a pointer to an
object and the object itself. Is this possible in Ruby?
a) Is my reasoning correct?
b) Is there a way to do what I want? That is, freeze f or c[0] so that
I get some sort of message/error/exception?
c) Do my examples violate POLS?
Consider ...
irb(main):020:0> c=[0,1]
=> [0, 1]
irb(main):021:0> c[0].freeze
=> 0
irb(main):022:0> c[0]=2
=> 2
irb(main):023:0> c
=> [2, 1]
irb(main):024:0>
Similarly ...
irb(main):029:0> f=1
=> 1
irb(main):030:0> f.freeze
=> 1
irb(main):031:0> f=2
=> 2
It took a few moments for me to scratch my head and then I thought
that the reason that there was no message when c[0] or f changed was that
c[0] is not an object but a reference to an object (the number 2).
So I searched the archives and it appears taht my reasoning is
correct. I think.
there was the suggestion to make f a constant, F. Yes, that generates
a warning ... but it is not what I want. I want to freeze the
reference as well as the object.
In C++ it is possible to "freeze" (i.e. const) both a pointer to an
object and the object itself. Is this possible in Ruby?
a) Is my reasoning correct?
b) Is there a way to do what I want? That is, freeze f or c[0] so that
I get some sort of message/error/exception?
c) Do my examples violate POLS?