输入异常处理无效 - SmallTalk

问题描述:

让名为“sum”的smalltalk ms​​g返回数组中元素的总和。输入异常处理无效 - SmallTalk

例如:#(1 2 3 4 5)总和----> 15

当输入为#(1 2 '' 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 | temp:=#(1 2 3'as'4 5)sum。 temp:= temp * 5。

更改sum方法忽略输入Array中的错误类型没有任何意义。此外,通过将其替换为UI消息,您完全无法控制可接受的输入类型。而是在您使用的地方处理这些异常sum

[^self readInput sum ] 
    on: Error do: [ :error| Transcript show: 'Invalid input provided for sum' ].