Why? (question, not a challenge :) ) - I really only use it in a Logger class I developed that let’s me know at the time of logging, what method and class I’m in - ... write to the log... done.
On Sat, Jun 20, 2020 at 3:08 AM Stéphane Ducasse <[email protected]> wrote: > as a general principle do not use thisContext. > > > S. > > > On 20 Jun 2020, at 01:12, Russ Whaley <[email protected]> wrote: > > Thank you both for your insights. I’ve done the newFor: style many times, > but where it falls short is when I read in a STON object. No worries, I was > just wondering if there was something cool like “what object am I sitting > on?”... I looked through Context and the client message will be helpful to > me in other areas. I’m always eager to learn. Thank you very much for being > willing to teach. > > Thanks! > Russ > > On Wed, Jun 17, 2020 at 9:05 PM Richard O'Keefe <[email protected]> wrote: > >> I have a strong dislike for incompletely initialised objects. >> So I would do it like this: >> >> myInstVar := TheDependentClass newFor: self. >> >> (together with any other essential information as parameters). >> In my Smalltalk system it would look like this: >> >> Whatever subclass: #TheDependentClass >> instanceConstantNames: 'owner' >> ... >> class methods for: 'instance creation' >> newFor: owner >> ^(self basicNew) pvtOwner: owner; yourself >> >> methods for: 'initialising' >> pvtOwner: anObject >> super pvtPostNew. >> owner := anObject. >> >> Private access to methods with a 'pvt' prefix is enforced. >> Instance constants can only be set in private methods. >> There's an additional wrinkle that makes it a run time >> error to call TheDependentClass new, so that you cannot get >> an incompletely initialised object. >> >> In any Smalltalk you can follow similar conventions even if >> they are not enforced. >> >> Of course if you don't mind incompletely initialised objects, >> nothing stops you writing code that allows them. The question >> is whether you want to be able to trust the 'owner' field or >> not. >> >> On Thu, 18 Jun 2020 at 09:46, Esteban Maringolo <[email protected]> >> wrote: >> >>> Objects interact with each other by sending messages, although you can >>> get the sender by using reflection (thisContext sender), it is not a >>> common practice to do so. >>> So if you need another object to know the sender (or any other object) >>> you simply pass it as a parameter. >>> >>> So modifying your example, and making the syntax actually work it would >>> be: >>> >>> self property: ObjectClass new. >>> self property caller: self. >>> >>> and then when you need to deal with that you can simply get a >>> reference to that object and send it a message to do something: >>> self property caller doSomething. >>> >>> You can also have something like >>> >>> self property: (ObjectClass for: self) >>> >>> >>> In that case the #for: message is received by "ObjectClass class", >>> which you can think of as if it were a Factory or a "static" method >>> (it is not! it is much more powerful than that). >>> >>> ObjectClass class>>#for: callerObject >>> ^self new >>> setCaller: callerObject; >>> yourself >>> >>> And that's it, you have an instance of ObjectClass that you >>> initialized by sending #for: instead of #new (internally it ended up >>> calling #new, but from the outside it was just a message send). >>> >>> And for the most part that's Smalltalk: Objects and messages. >>> >>> Regards! >>> >>> Esteban A. Maringolo >>> >>> On Wed, Jun 17, 2020 at 6:19 PM Russ Whaley <[email protected]> >>> wrote: >>> > >>> > I find myself, over and over, creating a & storing q new object in an >>> instVar, then storing (my)self on that object - so I can have easy access >>> to the 'object that created me.' >>> > >>> > <what I do now...> >>> > >>> > self instVar := NewClass new. >>> > >>> > self instVar callingObject: self. >>> > >>> > "where these call the same messages" >>> > >>> > self myMessage. >>> > >>> > self instVar callingObject myMessage. >>> > >>> > <is there a way to...> >>> > >>> > self instVar := NewClass new. >>> > >>> > self instVar objectWhoCreatedMe myMessage. >>> > >>> > "I know there is a 'thisContext sender' - but is there a 'who created >>> me' concept?" >>> > >>> > >>> > Ultimately, there is no real overhead to storing (my)self on a new >>> object, I guess, but as I'm developing and testing, I tend to have a whole >>> lot of 'stranded objects' I have to remove manually. >>> > >>> > Thoughts? >>> > >>> > Thanks! >>> > -- >>> > Russ Whaley >>> > [email protected] >>> >>> -- > Russ Whaley > [email protected] > > > -------------------------------------------- > Stéphane Ducasse > http://stephane.ducasse.free.fr / http://www.pharo.org > 03 59 35 87 52 > Assistant: Aurore Dalle > FAX 03 59 57 78 50 > TEL 03 59 35 86 16 > S. Ducasse - Inria > 40, avenue Halley > <https://www.google.com/maps/search/40,+avenue+Halley?entry=gmail&source=g> > , > Parc Scientifique de la Haute Borne, Bât.A, Park Plaza > Villeneuve d'Ascq 59650 > France > > -- Russ Whaley [email protected]
