无效的输入异常处理-SmallTalk
让名为“sum”的smalltalk消息返回数组中元素的总和 例:#(12345)总和-->15 当输入为#(12'a'35)和时。执行终止并显示一个大的异常框。 相反,我们如何通过显示一条消息来优雅地退出执行呢。我不想显示大的异常窗口无效的输入异常处理-SmallTalk,smalltalk,gnu-smalltalk,Smalltalk,Gnu Smalltalk,让名为“sum”的smalltalk消息返回数组中元素的总和 例:#(12345)总和-->15 当输入为#(12'a'35)和时。执行终止并显示一个大的异常框。 相反,我们如何通过显示一条消息来优雅地退出执行呢。我不想显示大的异常窗口 sum |sum| sum := 0 self do: [:a | sum := sum + a] ^sum 我试图用下面的方法处理异常。但是,我注意到,如果输入无效,执行不会终止 sum |sum| sum :
sum
|sum|
sum := 0
self do: [:a | sum := sum + a]
^sum
我试图用下面的方法处理异常。但是,我注意到,如果输入无效,执行不会终止
sum
|sum|
sum := 0
self do: [:a |
(a isInteger) ifFalse:[
^[Error signal] on: Exception
do: [:ex | Transcript show: 'Entered values are non-numeric. Hence comparison is not possible.']
]
sum := sum + a
]
^sum
如果将下面的代码放在工作区中,我希望执行在第2行终止。然而,第3行也将被执行。
|临时工|
温度:=#(1 2 3'作为4 5)总和。
temp:=temp*5。更改
sum
方法忽略输入数组中的错误类型是没有意义的。此外,通过用UI消息替换它,您完全失去了对什么样的输入是可接受的控制。而是在您使用的地方处理这些异常情况sum
:
[ ^ self readInput sum ]
on: Error do: [ :error| Transcript show: 'Invalid input provided for sum' ].
更改sum
方法以忽略输入数组中的错误类型是没有意义的。此外,通过用UI消息替换它,您完全失去了对什么样的输入是可接受的控制。而是在您使用的地方处理这些异常情况sum
:
[ ^ self readInput sum ]
on: Error do: [ :error| Transcript show: 'Invalid input provided for sum' ].