2016-06-10 1 views
0

Ruby의 결합 된 비교 연산자 또는 우주선 연산자가 정렬에 사용됩니다. 이 연산자를 sort 함수와 함께 사용 했으므로이 연산자의 메커니즘을 이해할 수 없습니다. 이 연산자의 다른 용도가 있습니까?루비 결합 비교 연산자/우주선 연산자를 소트 이외의 용도로 사용합니까?

+0

기술적으로 연산자는 아니지만 사용자가 정의하는 방법입니다. "다른 모든 용도"는 사용자가 상상하고 디자인 할 수있는 범위를 의미합니다. 질문에 대한 답변은 "예"입니다. – vgoff

답변

5

기본적으로 두 값이 한 연산자에서 모두보다 크거나 작거나 같은지 묻습니다. 메소드를 사용하여 증가, 감소 또는 아무 것도하지 않도록 값을 리턴 할 수 있습니다.

1 <=> 3 returns -1 
3 <=> 1 returns 1 
3 <=> 3 returns 0 
당신은 당신이 이길 게임을 한 지점을 수여 점수 유지 방법이 있다면 예를 들어

, 마이너스 잃을 게임, 또는 넥타이에 대한 변화없이 1 점 ...

def score(player_1, player_2, current_score) 
    current_score + player_1 <=> player_2 
end 

그럼

score(1,2,0) 
#=> -1 
score(1,3,-1) 
#=> -2 
score(3,2,-2) 
#=> -1 
score(3,0,-1) 
#=> 0 
score(4,0,0) 
#=> 1 
score(3,0,1) 
#=> 2 
score(3,3,2) 
#=> 2 
+0

또 다른 일반적인 사용법은'case' 문에 있습니다. 예를 들어,'case a <=> b; -1 일 때 ...; 0 일 때 ...; 언제 1시 .... –

+0

'current_score'는 지역 변수입니다. '+ ='를 사용하여 할당하는 것은 의미가 없습니다. 당신은 단지'+'를 가져야 만합니다. – sawa

+0

좋은 지적이지만 이것은 매우 빠른 예일뿐입니다. – Beartech

0

은 우주선 연산자는 Comparable module 필요하다. 기본적으로 클래스의 include Comparable이 클래스에 <=> 메소드를 정의하고>, < =, <,> =, == 및 사이? 메소드는 해당 클래스에 대해 자동으로 정의됩니다.

관련 문제