[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: a whimsical question



Sorry for the vague asking. I will try to make it clearer.

   > >    anObject _AddSlots: (| aSlot <- ??method?? |) ?
   >      anObject _AddSlots: (| aSlot = ??method?? |)

I liked to ask how to modify the method which is contained in a slot of
an object. If it is contained in a constant slot, we may need to first
remove it and add a slot of the same name with a new (different) method.
Is this right? Is it no problem to do the above without using the outliner?
(If my vague memory is correct, I sometimes failed to do that -- system crash.)

   > Note that this is an alternative form of reflection. Rather than sending
   > normal messages to a mirror on the object, we are sending a primitive
   > message to the object itself. This works because primitives have access
   > to the "underlying machinery" directly. The reason most Self source files
   > do this kind of thing is that it is a little faster than using mirrors

I understand this, but

   > and also because mirrors aren't fully functional while the basic "world"
   > is being read in.

would you kindly tell me any pointers to the above problem?

   > > Is this too much a reflective way? In so doing, I have some troubles in
   > > the updates of objects (in a recursive use of AddSlots)..
   > > 
   > >    anObject _AddSlots: (| aSlot <- ( anotherObject _AddSlots: ( anotherSlot <- ??anotherMethod |) ) |)
   > 
   > What you did here (if you change the "<-"s to "="s) is to add a method to
   > "anObject" so that "anObject aSlot" will add "anotherSlot" to "anotherObject"
   > every time it is executed. That is a strange thing to do. 

Surely I think you feel it strange (my example is silly), but the point is
that I like to modify the method in the slot. Doesn't Self allow us to put
a method in a DATA slot? I like to execute different methods under the
identical slot name.. Probably, there may be a much better way for it.

   > If you merely
   > what to create several objects nested in each other, you can do this:
   > 
   >     anObject _AddSlots: (| aSlot <- (| anotherSlot = ??anotherMethod?? |) |)
   > 
   > In this case, however, "aSlot" is a data slot with an initial value, and
   > not a method.

This would be an answer to what I liked to know. Is this side-effect free?
How should I make the method executed? Where is that SLOT "anotherSlot" put?

   > Hmmm... I probably misunderstood what you are asking. Anyway, you can
   > create nested objects without having to use _AddSlots: at all. 

Would you kindly give me some good examples?

Probably, it is strange or useless to modify the method in a slot of an
object, but I am caught by it...

Any help to a miserable, confused Self user?

Thank you so much.

a*