Exception handling 引发自定义错误/异常
我在和Pharo玩游戏,想提出一个定制的错误/异常/什么,但我不知道怎么做。Exception handling 引发自定义错误/异常,exception-handling,smalltalk,pharo,squeak,Exception Handling,Smalltalk,Pharo,Squeak,我在和Pharo玩游戏,想提出一个定制的错误/异常/什么,但我不知道怎么做。 我已经浏览了相关(我认为)章节的“法罗的例子”和“深入到法罗”;但我无法确定这一点-这似乎远远超出了我需要的水平 我有一个变量的setter,如果输入不是整数,我想引发一个错误/异常: MyClass >> someVariable: anInteger anInteger isInteger ifFalse: [ self SomehowProtestLoadly - the par
我已经浏览了相关(我认为)章节的“法罗的例子”和“深入到法罗”;但我无法确定这一点-这似乎远远超出了我需要的水平 我有一个变量的setter,如果输入不是整数,我想引发一个错误/异常: MyClass >> someVariable: anInteger anInteger isInteger ifFalse: [ self SomehowProtestLoadly - the part I don't know how to do ]. someVariable := anInteger MyClass>>某个变量:整数 整合器 ifFalse:[我不知道怎么做的部分]。 someVariable:=整数
只是中止或退出就足够了。。。但是如果可能的话,我想用更多的“flare”来做这件事——并且用更解释的方式…最简单的方法就是发出一个通用错误的信号:
someVariable: anInteger
anInteger isInteger
ifFalse: [self error: 'must be an Integer'].
someVariable := anInteger
现在,如果要发出特定错误的信号,请执行以下操作:
Error
的子类,比如说,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]
非整数参数
类添加一个实例变量,即参数
。为它添加一个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
变量将能够响应有问题消息的参数。请注意,字符串“必须是整数”
足够通用,可以在非整数参数
类中编码为默认消息,而不是在每个客户端重复。传递特定于客户端的字符串的选项最终是否可用,取决于OP决定。@aka.nice Good point。事实上,一旦为异常创建了特定的类,就可以添加更多的默认行为,将代码从客户端移动到异常对象。