Ruby에서 fail 키워드는 무엇을합니까?


88

루비를 배우면서 fail키워드를 만났습니다 . 무슨 뜻이에요?

if password.length < 8
   fail "Password too short"
end
unless  username
   fail "No user name set"
end

8
아래 답변 외에도 사람들이 raise예외를 처리 fail할 때 와 그렇지 않을 때 사용한다는 것을 아는 가치가 있습니다.
Bala

6
키워드가 아니라 방법입니다.
Jörg W Mittag 2013 년


또한 다음과 같이 한 줄로 작성할 수 있습니다. fail "Password too short" if password.length < 8그리고fail "No user name set" unless username
PhilT

답변:


136

루비에서 fail와 동의어이다 raise. fail키워드는 방법이다 Kernel클래스가 포함되는 모듈 Object. 이 fail메서드는 raise키워드 와 마찬가지로 런타임 오류를 발생시킵니다 .

fail메서드에는 세 가지 오버로드가 있습니다.

  • fail: RuntimeError오류 메시지없이 a 를 발생시킵니다.

  • fail(string): RuntimeError오류 메시지로 문자열 인수를 사용하여 a를 발생시킵니다.

    fail "Failed to open file"
    
  • fail(exception [, string [, array]]): exception선택적 오류 메시지 (두 번째 인수)와 콜백 정보 (세 번째 인수)를 사용하여 클래스 (첫 번째 인수) 의 예외를 발생시킵니다.

    예 : 잘못된 인수가 주어지면 실패해야하는 함수를 정의했다고 가정합니다. ArgumentErrora가 아닌 a 를 올리는 것이 좋습니다 RuntimeError.

    fail ArgumentError, "Illegal String"
    

    또 다른 예 : 전체 역 추적fail메서드에 전달 하여 rescue블록 내부의 추적에 액세스 할 수 있습니다 .

    fail ArgumentError, "Illegal String", caller
    

    caller역 추적을 형식의 문자열 배열로 반환하는 커널 메서드입니다 file:line: in 'method'.

인수가 없으면 $!에서 예외가 발생합니다. 또는 $! 인 경우 RuntimeError를 발생시킵니다. 0입니다. 단일 String 인수를 사용하여 문자열을 메시지로 사용하여 RuntimeError를 발생시킵니다. 그렇지 않으면 첫 번째 매개 변수는 Exception 클래스 (또는 예외 메시지를 보낼 때 Exception 개체를 반환하는 개체)의 이름이어야합니다. 선택적 두 번째 매개 변수는 예외와 관련된 메시지를 설정하고 세 번째 매개 변수는 콜백 정보의 배열입니다. begin ... end 블록의 구조 절에서 예외가 포착됩니다.

Source : Ruby Documentation on the Kernel Module .


2
3 개의 글 머리 기호로 3 개의 간단한 예를들 수 있습니까? 그것은 당신의 대답보다 구체적인 것 ... :)
Arup에 Rakshit

1
더 나은 루비 문서보다 +1, crazybob의 와우 ruby-doc.org/core-2.0.0/Kernel.html#method-i-raise :-)))
보리스 Stitnicky

그것은 나를 위해 일했지만 Rubocop는 그것을 변환raise
paul

32

Rubocop 은 두 단어의 사용법에 대해 말합니다.

' 예외 신호 fail대신 사용하십시오 raise.'

' 예외를 다시 던지는 raise대신 사용하십시오 fail.'

여기에 예가 있습니다.

def sample
  fail 'something wrong' unless success?
rescue => e
  logger.error e
  raise
end

스타일 자문은 +1; 심지어 그들이 의미 의도 된 설정에서 각각 동일한 사용하는 경우 더 나은 의사를 전달하는 데 도움이
fatuhoku

26

fail == raise

즉, 오류 발생 방법 fail의 인기있는 별칭 일뿐 raise입니다. 용법:

fail ArgumentError, "Don't argue with me!"

7

www.ruby-doc.org 는 당신의 친구입니다. 내가 검색했을 때 rubydoc fail" Kernel "이 첫 번째 히트작이었습니다. 저의 조언은 의심 스러우면 이와 같은 정의에 대한 확실한 소스로 가라는 것입니다.


2
정말 실패입니다. 실패에 대한 코드 예제는 인상 O_O에서 복사 - 붙여 넣기입니다
Vajk Hermecz

4
@VajkHermecz fail은 raise의 별칭이므로 문서를 재사용합니다. 수집 배열 #지도 및 배열 번호 워드 프로세서와 비교
제이미 메이시에게
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.