2011-01-09 3 views

답변

25

에서 오퍼레이터의 이름 null-coalescing operator이다. 링크 된 원본 블로그 게시물은 언어 간 병합에있어 차이점을 설명했습니다. C#과 Ruby null 통합의 새로운 비교는 here입니다. 한마디로

, 당신은 같이 ||을 사용할 수 있습니다 : 당신이 거짓 병합 괜찮다면

a_or_b = (a || b) 
+0

링크가 종료되었습니다. – orourkedd

+0

@orourkedd 고마워, 나는 새로운 링크로 그것을 약간 수정했다. –

+2

이것은 실제로 "위조 된 통합 연산자"입니다. – Kelvin

12

, 당신은 사용할 수 있습니다 || 운영자 : 거짓이 유효한 값이 될 수있는 경우

a = b || c 

, 당신은 할 수 있습니다 :

(B)가 전무 점검하고,이 경우, A는 경우 C의 값을 할당하고
a = b.nil? ? c : b 

그렇지 않다. b.

+0

나는'a = b or c;를 시도했다. '을 넣는다. 놀라움, 놀람, 내 루비 1.8.6에서, 그것은 b의 값을 출력합니다.그 이유는'또는'가'= ' – Shuo

+0

'또는''부울 연산자가 아니라 루비의 제어 흐름 연산자보다 우선 순위가 낮기 때문입니다 : http://devblog.avdi.org/2010/08/02/using-and -and-in-ruby/ – orourkedd

+0

불행하게도 두 번째 스 니펫은'b'가 메서드 (즉, 두 번 호출 됨)이면 부작용이있을 수 있습니다. – Kelvin

3

Ruby에는 일반적인 null 통합이 [] 또는 0 또는 0.0 인 특정 기능이 있습니다.

(x || []).each do |y| 
: ( NilClass 그들을 구현하므로)

대신

x = y || [] # or... 
x = y || 0 

은 ... 당신은 단지

x = y.to_a # => [] or .. 
x = y.to_i # or .to_f, => 0 

이 같은 특정 일반적인 디자인 패턴을 만드는 ... 할 수있는

... 조금 더 멋지게 보임 :

x.to_a.each do |y| 
+1

'[* x] .each do | y |'와 같이 자주 볼 수 있습니다. –