2013-09-23 4 views
0

"sum"이라는 작은 토크 msg는 배열의 요소 합계를 반환합니다.유효하지 않은 입력 예외 처리 - 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 

은 그러나, 3 호선도 실행지고 라인 (2)에서 종료된다. | temp | 임시 직원 : = # (1 2 3 ''4 5) sum. temp : = temp * 5.

답변

4

입력 Array에서 잘못된 유형을 무시하도록 sum 메소드를 변경하는 것은 의미가 없습니다. 또한 UI 메시지로 대체하여 어떤 종류의 입력을 수용 할 수 있는지 완전히 제어 할 수 있습니다. 귀하가 사용하는 장소에서 이러한 예외 사항을 다루기보다는 sum :

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