我从the MOOC documentation得知,对于在某些代码段中可能发生的多个异常,可以使用相同的处理程序,例如:
[ do some work ]
on: ZeroDivide, Warning
do: [ :ex | what you want ]
在同一文档中,有一个带有ensure
的示例,以确保始终执行代码(尽管有例外):
[ doSomething ] ensure: [ alwaysExecuteThis ]
但是,我想要这样的东西:
[ do some work ]
on: ZeroDivide
do: [ :zeroDivide | handle it ]
on: Warning
do: [ :warning | handle it ]
ensure: [ alwaysExecuteThis ]
诚然,这是我的Java经验,影响了我想要使用Pharo的方式。
答案 0 :(得分:1)
It seems it's possible使用嵌套块:
[ [ [ [ doSomething here ]
on: ZeroDivide
do: [ :zeroEx | 'zeroExc' crLog ] ]
on: Warning
do: [ :warning | 'warning' crLog ] ]
ensure: [ 'ensure' crLog ] ]
答案 1 :(得分:1)
尝试将此方法添加到BlockClosure
:
on: exception1
do: block1
on: exception2
do: block2
^self on: exception1 , exception2 do: [:ex |
(exception1 handles: ex)
ifTrue: [block1 value: ex]
ifFalse: [block2 value: ex]]
请注意,exception1
和exception2
可以是Exception
的子类或ExceptionSet
的实例(用#,
创建)。