除非属于某种类型,否则重新签署异常

时间:2013-11-21 14:14:09

标签: error-handling smalltalk visualworks

我想确保评估aBlock只会引发SomeCustomError类型的错误。有没有比使用isKindOf更好的方法:?

aBlock 
  on: Core.Error
  do: [:ex | 
       (ex isKindOf: SomeCustomError) 
         ifTrue: [ex pass]
         ifFalse: [(SomeCustomError identification: #generalError messageText: ex messageText) raise]]

2 个答案:

答案 0 :(得分:1)

另一种方法 - 在类异常中定义方法 isMyTerribleException ,它应该返回 false 。在 CustomException 类中,定义重新定义方法并返回 true

aBlock 
  on: Core.Error
  do: [:ex | 
       (ex isMyTerribleException) 
         ifTrue: [ex pass]
         ifFalse: [(SomeCustomError identification: #generalError messageText: ex     messageText) raise]]

它会更好,因为你可以引入新的异常类,必须要捕获它

答案 1 :(得分:1)

这听起来很奇怪。两件事

1)如何:

您正在从处理程序上下文重新签名。 这真的是你想要的吗? 或者您是否想要从原始上下文中重新发出第一个错误?

在后一种情况下,你应该使用类似的东西:

ex resignalAs: (SomeCustomError identification: #generalError messageText: ex messageText)

2)什么:

这不是KindOf:困扰我,但整个想法......
捕获所有类型的错误并替换为特定的错误?
用例是什么?
谁会抓到具体的一个?
或者特定的一个具有不同的默认操作?