Whee!
Noury Bouraqadi
bouraqadi at ensm-douai.fr
Tue May 20 12:18:40 UTC 2003
Hi Dominic,
You can play with MetaclassTalk
(http://csl.ensm-douai.fr/MetaclassTalk). It provides a running MOP
that enhances Squeak reflective facilities. So, you can have a
meta-object that controls how instance variables reads and write are
done for an arbitrary set of objects, control message sends/reception,
method look-up and evaluation...
Noury
Dominic Fox a écrit:
> OK, now this is quite fun.
>
> Part of my interest in Smalltalk has to do with a more general curiosity about
> what happens when you add things like reflection and metaclasses to an object
> oriented system (or don't take them away in the first place). This is one of
> the things I find myself missing when I'm coding in VB. I like the fact that
> in Python, for instance, it's trivially easy to create an object that acts as
> a facade for any other objects you tell it to: you just intercept messages
> sent to that object using __setattr__ and __getattr__, and pass them on to
> the first of the sub-objects that can receive them (or to all of them, one
> after another, possibly sequencing their return values into a list or tuple).
> Such an object would act as a kind of dynamic proxy; and of course you can
> start intercepting those method calls and hooking all sorts of side-effects
> up to them as well, if you want to.
>
> So far, in Smalltalk, I have a class "Interceptor" with a private variable
> "log" that's initialized to be a Bag. Interceptor has a method "intercept:"
> which looks like this:
>
> intercept: aBlock
> ^ [message: |
> self log add: message.
> aBlock value: message]
>
> You pass in a block (that takes a single parameter) and get a block back that
> does the same thing, except that Interceptor logs the parameter that was
> passed to it. Now for an object foo with a method bar, we can create a block
> that passes a message to foo's bar, and intercept *that*:
>
> interceptedFooBar := myInterceptor intercept: [:message | foo bar: message]
>
> and so on ad nauseam.
>
> Is there, in fact, a Smalltalk equivalent to __getattr__/__setattr__? If not,
> how do you do dynamic proxies (e.g. proxies that don't know until you tell
> them what they're proxies for)?
>
> Dominic
>
>
>
--
------------------------------------------
Dr. Noury Bouraqadi - Enseignant/Chercheur
Ecole des Mines de Douai - Dept. G.I.P
http://csl.ensm-douai.fr/noury
European Smalltalk Users Group
http://www.esug.org
Squeak, an Open Source Smalltalk
http://www.squeak.org
------------------------------------------
More information about the Squeak-dev
mailing list
|