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