2013-06-11 3 views
4

|| 연산자와 rescue을 Ruby에서 사용하는 데 차이가 있습니까?다른 점은 || 구조?

말 :

b = A.value || "5" 

b = A.value rescue 5 

객체 Avalue 방법을 가지고 있지 않는 경우.

답변

9

|| 부울 또는 연산자이다 (명심 루비, 값만 nilfalse 부울 문맥에서 거짓으로 평가)

nil || 5 
# => 5 

false || 5 
# => 5 

4 || 5 
# => 4 

rescue는 예외이다 잡기 :

fail 'bang' rescue 5 
# => 5 

'bang' rescue 5 
# => "bang" 

nil rescue 5 
# => nil 

예에서 Avalue :

에 응답하지 않습니다.
A.value 
# NoMethodError: undefined method `value' ... 

b = A.value || 5 
# NoMethodError: ... 
b 
# => nil 

b = A.value rescue 5 
b 
# => 5 

지금 가정이 A.value 반환 nil : 그렇다

A.value 
# => nil 

b = A.value || 5 
b 
# => 5 

b = A.value rescue 5 
b 
# => nil 
+0

덕분에 그것은 –

+0

입니다. A.value는 항상 메서드를 찾지 않고 nil을 반환하는 것이 좋습니다. –

8

||or 연산자입니다. 첫 번째 줄의 내용은 다음과 같습니다.

b를 A.value로 설정하십시오. b가 아닌 경우 (즉, b가 nil 또는 false 인 경우) 문자열 "5"로 설정하십시오.

Rescue를 사용하면 예외로부터 복구 할 수 있습니다. 두 번째 줄은 다음과 같습니다.

b를 A.value로 설정하십시오. A.value에서 예외가 발생하면 문제를 무시하고 대신 b를 5로 설정하십시오.

값이없는 메소드가있는 객체 A의 경우 첫 번째 행에서 앱이 중단됩니다.

value 메소드가 nil을 반환하는 객체 A의 경우 두 번째 행은 b를 nil로 설정합니다.

2

다른 사람은 이미 인라인 rescueStandardError 구출에 동등있는 동안, 또 하나 개의 차이는, || 정직한 운영자는 것을, 당신에게 무엇을하는 그게 various manuals of style passionately frown upon입니다. 즉, 인라인 rescue은 외설스러운 해킹이며, 프로덕션 코드에서 너무 자주 사용해서는 안됩니다. 가볍게 꾸며 놓은 begin ... rescue ... else ... ensure ... end 문장을 대신 사용하십시오.

관련 문제