Occasionally, it is desirable to use a single handler for several nonhierarchically related exceptions. To handle this situation, the when:do: syntax has been extended to allow an ExceptionalEvent collection as the when argument. ExceptionalEvent collections are created by sending the vertical bar (|) message to an instance of ExceptionalEvent as follows:
In class ExceptionalEvent:
| anExceptionalEvent "Answer a new ExceptionalEvent collection containing the receiver and anExceptionalEvent."
In the ExceptionalEvent collection:
| anExceptionalEvent "Add anExceptionalEvent to the exceptions stored in the receiver."
Given these definitions, it is possible to write the following:
[ "Some code that could cause several exceptions" ] when: Type1Exception | Type2Exception | Type3Exception do: [ :signal | signal exitWith: 'I expected this exception'].
ExceptionalEvent collections can be stored in a variable and later referred to:
ExpectedExceptions := Type1Exception | Type2Exception | Type3Exception. [ "Some code that could cause several exceptions"[ when: ExpectedExceptions do: [ :signal | signal exitWith: 'I expected this exception'].
ExceptionalEvent collections cannot be signaled.
Within the body of a handler block, sending exception to the passed-in instance of Signal always answers the particular exception that was signaled.