#, will do the trick.
ExceptionOne, ExceptionTwo

Nesting the #on:do: messages is probably the more correct approach, since
each one would be catching just one family of exceptions and not require
class testing. Unfortunately, nested #on:do: messages are terribly ugly.
Many people (I hate that phrase!) tend to isolate the protected
implementation from the protecting code.

e.g. the implementation of #doSomething wraps a message send to
#doSomethingProtected in the exception handlers.

On Thu, May 25, 2023 at 9:45 AM James Foster via Pharo-users <
pharo-users@lists.pharo.org> wrote:

> Rather than ‘Array with:with:’ it probably should be ‘ExceptionSet
> with:with:’.
>
> On May 25, 2023, at 9:19 AM, James Foster via Pharo-users <
> pharo-users@lists.pharo.org> wrote:
>
> The #’on:do:’ implementation in Block accepts either an Exception or an
> ExceptionSet as the first parameter. So you can do something like the
> following (I’m typing from memory without trying so may have syntax
> errrors):
>
> [ “tryBlock” ] on: (Array with: ExceptionOne with: ExceptionTwo) do: [:ex
> |
>   (ex isKindOf: ExceptionOne) ifTrue: [ “handleOne” ].
>   (ex isKindOf: ExceptionTwo) ifTrue: [ “handleTwo” ].
> ].
>
> The above code can be improved in a variety of ways, but it should get you
> started. Note also that since Smalltalk allows you to modify base classes,
> you could add #’on:do:on:do:’ to Block.
>
> James
>
> On May 25, 2023, at 8:24 AM, mlnt...@gmail.com wrote:
>
> In other languages there is the possibility to chain exception handlers
> like this:
>
> try { doOne(); doTwo(); doThree(); }
>
> catch(ExceptionOne ex){
>
> handleOne();
>
> }
>
> catch(ExceptionTwo ex) {
>
> handleTwo();
>
> }
>
> catch(ExceptionThree ex) {
>
> handleThree();
>
> }
>
> catch(Exception ex) {
>
> handleRest();
>
> }
>
> Is this possible in Pharo? I’ve tried
>
> [ block ]
>
> on: ExceptionOne do: [ handleOne ]
>
> on: ExceptionTwo do: [ handleTwo ]
>
> but it is invalid syntax.
>
>
>
>

Reply via email to