|
View:
New views
5 Messages
—
Rating Filter:
Alert me
|
|
|
Freeze not freezingNote 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? |
|
|
Re: Freeze not freezingHi,
In message "Re: Freeze not freezing" on Thu, 5 Nov 2009 23:05:28 +0900, Ralph Shnelvar <ralphs@...> writes: |a) Is my reasoning correct? #freeze protect an object from modification. The reference is not the target of freezing. |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? You can protect an array (or object) as a whole, since it is an object, so that c=[0,1] c.freeze c[0]=2 # => can't modify frozen array (RuntimeError) but you cannot freeze any variables. |c) Do my examples violate POLS? No. Unlike C++, variables and references are not object in any sense in Ruby. From my viewpoint, C++ violates POLS. ;-) matz. |
|
|
Re: Freeze not freezingMatz,
I deeply appreciate your answer. But I will repeat part of the question: Is there a way to detect ... in the general case ... that the reference to an object has changed? In a more C-like environment, a debugger is able to detect (via hardware) that a location in memory has changed. Is something similar available in Ruby? Where is the Ruby debugger (watch, etc.) documented? Ralph Thursday, November 5, 2009, 7:14:11 AM, you wrote: YM> Hi, YM> In message "Re: Freeze not freezing" YM> on Thu, 5 Nov 2009 23:05:28 +0900, Ralph Shnelvar <ralphs@...> writes: YM> |a) Is my reasoning correct? YM> #freeze protect an object from modification. The reference is not the YM> target of freezing. YM> |b) Is there a way to do what I want? That is, freeze f or c[0] so that YM> |I get some sort of message/error/exception? YM> You can protect an array (or object) as a whole, since it is an YM> object, so that YM> c=[0,1] YM> c.freeze YM> c[0]=2 # => can't modify frozen array (RuntimeError) YM> but you cannot freeze any variables. YM> |c) Do my examples violate POLS? YM> No. Unlike C++, variables and references are not object in any sense YM> in Ruby. From my viewpoint, C++ violates POLS. ;-) YM> matz. -- Best regards, Ralph mailto:ralphs@... |
|
|
Re: Freeze not freezing |
|
|
Re: Freeze not freezingOn 2009-11-05, Yukihiro Matsumoto <matz@...> wrote:
> From my viewpoint, C++ violates POLS. ;-) Sturgeon's Law: 90% of everything is crud. If you know this, C++ does not violate POLS. :) -s -- Copyright 2009, all wrongs reversed. Peter Seebach / usenet-nospam@... http://www.seebs.net/log/ <-- lawsuits, religion, and funny pictures http://en.wikipedia.org/wiki/Fair_Game_(Scientology) <-- get educated! |
| Free embeddable forum powered by Nabble | Forum Help |