|
RE: Re: Alternative for static const...: msg#00139lang.smalltalk.squeak.beginners
Greg is right, so you need to either load the class into a new image that doesn't have it, since loading a class executes the class side #initialize method, or you need to execute the method yourself and save the image. Ron > From: Greg Trasuk > Sent: Tuesday, February 27, 2007 10:30 AM > > I suspect you are "thinking in Java". Indeed, when you run a Java > program, its class variables will be initialized when the class is > loaded into the virtual machine, in other words the first time you > reference the class. > > But Squeak is different; it's a live image system. When you are editing > the class, you're actually making changes to the class in the running > system. When you restart Squeak, the entire memory image of the virtual > machine is reloaded from the last saved image, including the state of > any class variables (and instance variables, and processes, etc). > > Cheers, > > Greg. > > On Tue, 2007-02-27 at 07:51, Mispunt wrote: > > I am sorry, I did mean execute. I hoped that it would execute > > initialize when the class (or variableNames) where called by the > > program.. > > After running/execute the initialize method it is working :) > > > > Thanks for you'r help, > > > > Mispunt > > > > On 2/27/07, Bert Freudenberg <bert@xxxxxxxxxxxxxxx> wrote: > > > What do you mean with "isn't running"? As I wrote, you have to > > > execute it manually whenever you change the initialize method. > > > > > > - Bert - > > > > > > On Feb 27, 2007, at 13:33 , Mispunt wrote: > > > > > > > After some better testing, It doesn't work :S It seems that the > > > > initialize of the constants class isn't running... (the normal > > > > classVariableNames are working...) I have to use the poolDictionary > > > > because there are some codes that return in a lot of classes.. > > > > > > > > Mispunt > > > > > > > > On 2/27/07, Mispunt <mispunt@xxxxxxxxxxxxxxxxxxxxx> wrote: > > > >> Thanks Bert, it works. When I am using the poolDictionary it isn't > > > >> possible to use the constants in the Workspace right? or do I have > to > > > >> write methods for them when I want to use them? (well I don't want > > > >> to, > > > >> because it is just for testing purpose). > > > >> > > > >> Mispunt. > > > >> > > > >> On 2/27/07, Bert Freudenberg <bert@xxxxxxxxxxxxxxx> wrote: > > > >> > On Feb 27, 2007, at 10:08 , Mispunt wrote: > > > >> > > > > >> > > Hi all, > > > >> > > > > > >> > > For programming my Lego Mindstorms NXT I have to use codes > > > >> like 16r1F. > > > >> > > But I actually want to be able to use "readable" codes. In a > > > >> language > > > >> > > like Java I will do that with a static const, but as far as I > > > >> know I > > > >> > > have to do it with symbols in Smalltalk. > > > >> > > > > >> > No, there is a better way. > > > >> > > > > >> > If you are inside one class (or its subclasses), you would use > > > >> "class > > > >> > variables", one per constant. You add them in the class template: > > > >> > > > > >> > Object subclass: #Bla > > > >> > instanceVariableNames: '' > > > >> > classVariableNames: 'Const1 Const2' > > > >> > poolDictionaries: '' > > > >> > category: 'Bert-Bla' > > > >> > > > > >> > and the initialization code is in a class-side #initialize > method: > > > >> > > > > >> > initialize > > > >> > "self initialize" > > > >> > Const1 := 16r1F. > > > >> > Const2 := 12345. > > > >> > > > > >> > You need to execute the "self initialize" in the browser to do > the > > > >> > initialization. It will be executed automatically when loaded > into > > > >> > another image. > > > >> > > > > >> > Class variables are capitalized because they are sort-of > "global", > > > >> > they can be used in the defining class, its metaclass, and all > > > >> their > > > >> > subclasses. If you need to give access to these variables across > > > >> the > > > >> > class hierarchies, then you would do the same, but as a subclass > of > > > >> > SharedPool: > > > >> > > > > >> > SharedPool subclass: #BlaConstants > > > >> > instanceVariableNames: '' > > > >> > classVariableNames: 'Const1 Const2' > > > >> > poolDictionaries: '' > > > >> > category: 'Bert-Bla'. > > > >> > > > > >> > To use this "pool" of variables in another class, list it as a > > > >> "pool > > > >> > dictionary": > > > >> > > > > >> > Object subclass: #Bla > > > >> > instanceVariableNames: '' > > > >> > classVariableNames: '' > > > >> > poolDictionaries: 'BlaConstants' > > > >> > category: 'Bert-Bla' > > > >> > > > > >> > This makes all class variables of BlaConstants available to Bla > > > >> as if > > > >> > they were class variables. > > > >> > > > > >> > There are quite a few other ways to allow "global" variables in > > > >> > Smalltalk, but this one is the "clean" way to do it which works > > > >> > nicely with tools like Monticello. > > > >> > > > > >> > - Bert - > > > >> > > > > > > > _______________________________________________ > > > Beginners mailing list > > > Beginners@xxxxxxxxxxxxxxxxxxxxxxxxxx > > > http://lists.squeakfoundation.org/mailman/listinfo/beginners > > > > > _______________________________________________ > > Beginners mailing list > > Beginners@xxxxxxxxxxxxxxxxxxxxxxxxxx > > http://lists.squeakfoundation.org/mailman/listinfo/beginners > > _______________________________________________ > Beginners mailing list > Beginners@xxxxxxxxxxxxxxxxxxxxxxxxxx > http://lists.squeakfoundation.org/mailman/listinfo/beginners
|
|
| <Prev in Thread] | Current Thread | [Next in Thread> |
|---|---|---|
| Previous by Date: | Re: Re: Alternative for static const..., Greg Trasuk |
|---|---|
| Next by Date: | Private metods as my*?, Blake |
| Previous by Thread: | Re: Re: Alternative for static const..., Greg Trasuk |
| Next by Thread: | Private metods as my*?, Blake |
| Indexes: | [Date] [Thread] [Top] [All Lists] |
| News | FAQ | advertise |