문제

나는 프로그래밍 루비 책을 겪고 있었고 다음 개념을 이해하는 데 문제가 있습니다.

  1. 저자는 코드에서 발생할 수있는 "과도 예외"에 대해 이야기 한 다음 자신의 예외 객체를 작성하여 처리 할 것을 제안합니다. 나는 과도 오류가 무엇인지 완전히 이해하지 못하고 언제 자신의 예외 객체를 만드는 것이 적절한 지 이해하지 못한다고 생각합니다. 그는 그것에 대해 이야기합니다 6 장 그가 예외를 정의하는 것에 대해 이야기 할 때 :

예를 들어, 특정 유형의 네트워크 오류가 일시적 일 수 있습니다.제 6 장. 97 장. 예외에 정보 추가.

  1. 나는 또한 캐치와 루비를 던지는 데 어려움을 겪고 있습니다. 이것이 올라가고 구조하는 것보다 더 낫습니까?
도움이 되었습니까?

해결책

"과도 예외"라인에 대한 페이지 참조를 제공 할 수 있습니까?

어쨌든 언제든지 새로운 예외를 만들 수 있으며 결함에 대한 자세한 정보를 전송할 수 있도록 일반적으로 그렇습니다. 이것은 Alow 레벨 예외가 있고 사용자에게 더 의미있는 것으로 만들고 싶을 때 특히 좋습니다.

루비의 던지기/캐치는 실제로 C의 setjmp/longjmp와 같은 일종의 비 로컬 goto이지만 더 잘 작동합니다. 실행을 먼 길로 가고 싶을 때마다 사용할 것입니다.

분명히, 같은 이유로 당신은 사용하고 싶지 않습니다. goto 많이, 당신은 이것을하고 싶지 않습니다. 당신이 그것을 사용할 수있는 가장 큰 이유는 달리기를 유지 해야하는 프로그램의 경우에, 특정 종류의 오류를 잡으면 일을하고있는 모든 일을 버리고 시작으로 돌아갈 수 있습니다.


좋아, 그것은 내가 가진 Pickaxe 책의 판 중 하나의 97 페이지에있는 것 같지만, 그것이 무엇을 의미하는지 봅니다. ... 아, 여기, 제 3 판에 157 페이지가 있습니다.

우선, "과도"에 대한 비즈니스에는 네트워크 문제가 발생할 수있는 몇 가지 네트워크 문제가 있으며, BofH가 네트워크 케이블을 뽑아서 다시 연결할 때 스스로를 해결합니다. 따라서 일부 조건에서는 원할 수도 있습니다. 정착하고 당황하기 전에 다시 시도하는 데 몇 초를주십시오. 어떻게 하시겠습니까?

이 경우 새로운 종류의 예외를 정의합니다. 이것은 상속과 함께 이루어집니다.

class RetryException < RuntimeError
  # so this is a kind of RuntimeError which is a kind of Exception
  attr: ok_to_retry
  def initialize(ok_to_retry)
     @ok_to_retry
  end
end

그러면 무언가 잘못되면이 새로운 재 시도 가능한 예외를 제기 할 수 있습니다.

raise RetryException.new(true), "transient read error"

이제는 일종의 런타임 에러 인 무언가를 스택 위로 보내지 만 이제는 추가 정보가 첨부되어 있습니다. 즉, "예, 이것은 재조정 될 수 있습니다."

자, 여기에 a 정말 멋진 루비의 물건 : 그것은 몇 가지를 다시 시도 할 수있는 능력이 내장되어 있습니다. 따라서 스택 위에있는 곳에서는이 코드가 있습니다.

begin
   # do something that raises this exception
   do_something()
rescue RetryException => detail 
   # if the exception is one of these retryable ones, 
   # catch it here, but it in detail
   if detail.ok_to_retry  
      retry
   end
   # this means exactly the same as 'retry if detail.ok_to_retry`
   # from the book, btw

   # if it STILL doesn't work, send the exception on
   raise # just re-raises the last exception
end
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top