我和Pharo一起玩,想提出一个定制的错误/异常/东西,但我不知道怎么做。
我已经浏览了#34; Pharo by Example"的相关(我认为)章节。和#34;深入Pharo&#34 ;;但无法对此做出正面或反面 - 它似乎超出了我所需的水平......
我有一个变量的setter,如果输入不是整数,我想提出错误/异常:
MyClass >> someVariable: anInteger anInteger isInteger ifFalse: [ self SomehowProtestLoadly - the part I don't know how to do ]. someVariable := anInteger
只要中止或退出就足够了......但是如果可能的话,我想再多做一次" flare" - 并以更具说明性的方式......
答案 0 :(得分:5)
最简单的方法是发出一般错误信号:
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]
请注意,您的异常可以提供更多信息,比如发送的实际参数。为此,请将实例变量添加到NonIntegerArgument
类,即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
进行回复。