Pharo (및 다른 방언)에서는 ZeroDivide
예외가 다시 시작됩니다. 왜?. 예를 들어, 1/0
을 평가하고 계속 진행하면 대답은 ZeroDivide
입니다. 왜 이런거야? ZeroDivide
을 재개 할 수 없어야합니까?왜 ZeroDivide를 다시 시작할 수 있습니까?
수정 : 이 문제에 대해 자세히 살펴 보겠습니다.
여기서 예외는 예외가 발생하면 ZeroDivide
예외가 발생한다는 것입니다. 따라서이 예외를 다시 시작 가능하게 만들 수있는 유일한 이유는 다음을 활성화하는 것입니다.
right?
는하지만이 또한 재개 될 예외없이
[a/b] on: ZeroDevide do: [self anythingButTheQuotient]
을 기록 할 수 있었다.
재시작 가능한 예외는 "흥미로운"#defaultAction
이있는 경우에 의미가 있습니다. 그러나 ZeroDivide
의 경우는 그렇지 않습니다.
b = 0 ifTrue: [^0] ifFalse: [^a/b]
그래서 왜
#defaultAction
로 0을 사용하지 :
하나는 많은 경우에 하나 이러한 종류의 코드를 가지고 말을 유혹 할 수 있을까? 이는 위의 코드를 (이 경우) 더 간단하게 만들고, 다르게 행동해야하는 (틀림없이) 몇 가지 특수 처리기 만 필요합니다. 그러나 기본 동작을 통해 오류를 숨길 수 있기 때문에 이것은 매우 나쁜 결정입니다. 우리 모두가 알다시피, 나중에 오류를 나타냅니다.