Message Eating Null - article
nicolas cellier
ncellier at ifrance.com
Thu Jul 26 20:58:22 UTC 2007
Unfortunately nil will understand some messages...
In squeak
nil asString -> 'nil'
Nicolas
Vassili Bykov a écrit :
> I think proper exception handling combined with reflection can produce
> a very readable result without the flakiness of message-eating nil:
>
> lastNumber := [person office phone lastNumberDialed asString]
> ifNilShowsUp: ['']
>
> with #ifNilShowsUp: defined as
>
> BlockContext>>ifNilShowsUp: aBlock
> ^self
> on: MessageNotUnderstood
> do:
> [:ex |
> (ex receiver isNil and: [ex signalerContext sender = self])
> ifTrue: [ex return: aBlock value]
> ifFalse: [ex pass]]
>
> Or in other words, the second block is evaluated to produce the final
> result if one of the messages inside the first block returns nil and
> that nil doesn't understand the following message. All other failures,
> including MNUs by nil inside the messages sent from the block, fail
> "properly".
>
> Cheers,
>
> --Vassili
>
> P.S. "ex signalerContext sender = self" would fail to capture a
> relevant MNU in some cases. The 100% solution is an exercise for the
> reader. :)
>
>
More information about the Squeak-dev
mailing list
|