Forcing a BlockContext to evaluate in current context -djb
Derek Brans
brans at nerdonawire.com
Mon Feb 10 20:07:28 UTC 2003
Hi Lex,
Thank you for pointing out some of the land mines.
The reason I wanted to do this is that I knew where the block would
eventually be evaluated and I knew that in that context I would have
access to a method on an object that I don't have access to when I
define the block.
I figure from what you are saying that this is not generally a safe
practice so I managed to change the code around to work and it still
seems clean.
Thank you
Derek
On Sunday, February 9, 2003, at 05:55 AM, Lex Spoon wrote:
> Derek Brans <brans at nerdonawire.com> wrote:
>> I want to force a block to evaluate in the current context. How is
>> this
>> done?
>>
>> Example:
>> [self class] valueInCurrentContext
>> returns the class of the object that called "valueInCurrentContext"
>>
>
> There may be a cleaner way. This is going to lead to code that has
> landmines. For example, a refactoring browser (or a refactoring human)
> will happily do "extract method" on code such as this and move the code
> to a different method and even a different class, but it would break the
> meaning of the code. Also, it breaks the ability to do indirect calls,
> where the real sender (in some sense) invokes an intermediate helper
> method, which in turn invokes the raw block. It's fairly fundamental
> that methods cannot ask who invoked them (this is useful, because it
> makes methods definitely behave the same no matter where they are called
> from.)
>
> What are you trying to accomplish? Are you trying to pick up variables
> from the caller, or just the caller object itself ?
>
> Oh yeah, one other thing is that if you *really* call a block from a
> different context, you will probably lose the dynamic safety that the VM
> normally gives you, such as that all variables will exist when you try
> to read them. Adding the checks back adds some extra complexity.
>
>
> Lex
>
>
>
Nerd on a Wire: Web and Information Solutions
Website Design - Database Systems - Site Hosting
604.874.6463
mailto:info at nerdonawire.com
For more information, visit http://nerdonawire.com
More information about the Squeak-dev
mailing list
|