1

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

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

2 回答 2

1

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

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

会更好,因为您可以引入新的异常类,必须捕获这些类

于 2013-11-21T17:59:09.117 回答
1

这对我来说听起来很奇怪。两件事情

1)如何:

您正在从处理程序上下文中重新发出信号。真的是你想要的吗?
还是您想从引发第一个错误的原始上下文中退出?

在后一种情况下,您应该使用以下内容:

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

2)什么:

不是 isKindOf: 困扰我,而是整个想法......
捕捉所有类型的错误并用特定的替换?
用例是什么?
谁会抓住具体的?
还是特定的有不同的默认操作?

于 2013-11-21T18:16:34.977 回答