提出一个自定义 error/exception
Raising a customized error/exception
我在玩 Pharo,想提出一个自定义的 error/exception/something,但我不知道如何。
我浏览了 "Pharo by Example" 和 "Deep into Pharo" 的相关(我认为)章节;但无法对它做出正面或反面 - 它似乎远远高于我需要的水平...
我有一个变量 setter,如果输入不是整数,我想提出一个 error/exception:
MyClass >> someVariable: anInteger
一个整数是整数
ifFalse: [ self SomehowProtestLoadly - 我不知道该怎么做的部分]。
一些变量 := 一个整数
只是中止或退出就足够了...但如果可能的话,我想多做一点 "flare" - 并以一种更具解释性的方式...
最简单的方法是仅发出一般错误信号:
someVariable: anInteger
anInteger isInteger
ifFalse: [self error: 'must be an Integer'].
someVariable := anInteger
现在,如果您想发出特定错误信号,请执行以下操作:
- 创建
Error
的子class,比如说,NonIntegerArgument
像这样写你的代码
someVariable: anInteger
anInteger isInteger
ifFalse: [NonIntegerArgument signal: 'must be an Integer'].
someVariable := anInteger
要处理此异常,请执行以下操作
[myObject someVariable: self value]
on: NonIntegerArgument
do: [:ex | self handleException: ex]
请注意,您的异常可以提供更多信息,比如发送的实际参数。为此,将一个实例变量添加到您的 NonIntegerArgument
class,即 argument
。为它添加一个 getter 和一个 setter。那么
NonIntegerArgument class >> #signal: aString argument: anObject
^self new
argument: anObject;
signal: aString
并这样使用
someVariable: anInteger
anInteger isInteger
ifFalse: [
NonIntegerArgument
signal: 'must be an Integer'
argument: anInteger].
someVariable := anInteger
现在,ex
变量将能够使用违规消息的 argument
进行响应。
我在玩 Pharo,想提出一个自定义的 error/exception/something,但我不知道如何。
我浏览了 "Pharo by Example" 和 "Deep into Pharo" 的相关(我认为)章节;但无法对它做出正面或反面 - 它似乎远远高于我需要的水平...
我有一个变量 setter,如果输入不是整数,我想提出一个 error/exception:
MyClass >> someVariable: anInteger 一个整数是整数 ifFalse: [ self SomehowProtestLoadly - 我不知道该怎么做的部分]。 一些变量 := 一个整数
只是中止或退出就足够了...但如果可能的话,我想多做一点 "flare" - 并以一种更具解释性的方式...
最简单的方法是仅发出一般错误信号:
someVariable: anInteger
anInteger isInteger
ifFalse: [self error: 'must be an Integer'].
someVariable := anInteger
现在,如果您想发出特定错误信号,请执行以下操作:
- 创建
Error
的子class,比如说,NonIntegerArgument
像这样写你的代码
someVariable: anInteger anInteger isInteger ifFalse: [NonIntegerArgument signal: 'must be an Integer']. someVariable := anInteger
要处理此异常,请执行以下操作
[myObject someVariable: self value] on: NonIntegerArgument do: [:ex | self handleException: ex]
请注意,您的异常可以提供更多信息,比如发送的实际参数。为此,将一个实例变量添加到您的 NonIntegerArgument
class,即 argument
。为它添加一个 getter 和一个 setter。那么
NonIntegerArgument class >> #signal: aString argument: anObject
^self new
argument: anObject;
signal: aString
并这样使用
someVariable: anInteger
anInteger isInteger
ifFalse: [
NonIntegerArgument
signal: 'must be an Integer'
argument: anInteger].
someVariable := anInteger
现在,ex
变量将能够使用违规消息的 argument
进行响应。