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

これは私には奇妙に聞こえます。二つのこと

1) 方法:

ハンドラー コンテキストから再署名しています。それは本当にあなたが望むものですか?
または、最初のエラーが発生した元のコンテキストから辞退しますか?

後者の場合、次のようなものを使用する必要があります。

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

2) 何:

それは isKindOf: ではありませんが、これは私を悩ませますが、アイデア全体...
あらゆる種類のエラーをキャッチして、特定のものに置き換えますか?
ユースケースは何ですか?
誰が特定のものをキャッチしますか?
または、特定のものには別のデフォルトアクションがありますか?

于 2013-11-21T18:16:34.977 に答える
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 に答える