2013-09-23 58 views
0

讓名爲「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。

回答

4

更改sum方法忽略輸入Array中的錯誤類型沒有任何意義。此外,通過將其替換爲UI消息,您完全無法控制可接受的輸入類型。而是在您使用的地方處理這些異常sum

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