让名为“sum”的smalltalk消息返回数组中元素的总和。
例如:#(1 2 3 4 5)总和----> 15
当输入为#(1 2'a'3 5)总和时。执行终止并显示一个大的异常框。 而不是我们如何通过显示消息优雅地退出执行。我不希望显示大异常窗口。
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行也正在执行。 |温度| temp:=#(1 2 3'为'4 5)总和。 temp:= temp * 5。
答案 0 :(得分:4)
更改sum
方法以忽略输入Array
中的错误类型没有意义。此外,通过用UI消息替换它,您完全无法控制可接受的输入类型。而是在您使用sum
的地方处理这些异常:
[ ^ self readInput sum ]
on: Error do: [ :error| Transcript show: 'Invalid input provided for sum' ].