X::Numeric::DivideByZero — 0으로 나누기
X::Numeric::DivideByZero — 0으로 나누기 (Division by zero)
0으로 나누면 결과가 정의되지 않는데, Raku는 어떤 동작을 보여줄까요? 꼭 바로 오류가 나는 건 아니고, 결과물을 실제로 사용하려는 순간 오류가 드러나요. 그 오류를 담당하는 타입이 X::Numeric::DivideByZero예요.
본문
0으로 나누기를 시도하면 이 예외가 발생해요.
class X::Numeric::DivideByZero is Exception { }
예를 들어 1 / 0을 계산하면,
say 1 / 0;
CATCH { default { put .^name, ': ', .Str } };
# OUTPUT: «X::Numeric::DivideByZero: Attempt to divide by zero when coercing Rational to Str»
여기서 중요한 점을 짚고 넘어갈게요. 오류는 결과를 가지고 무엇인가를 하려는 순간에만 던져져요. 단순히
1/0; # no Error
처럼 계산만 하면 조용한 Failure만 생성될 뿐 오류가 나지 않아요. 위 첫 번째 예시에서 실제로 예외를 터뜨린 것은 say였던 거죠.
메서드 using
method using()
존재한다면, 사용된 연산자의 이름을 돌려줘요. 예를 들어 infix: 같은 값이에요.
메서드 details
method details()
존재한다면, 실패를 일으킨 연산에 대한 세부 정보가 담겨 있어요.
메서드 numerator
method numerator()
존재한다면, 연산의 분자(numerator)를 돌려줘요.