2013-01-10 1 views
0

방금 ​​레일에 루비를 배우기 시작했습니다. 저는 현재 튜토리얼을하고 있지만, 제 동료 중 한 명이 한 코드를 이해하려고합니다. 인터넷에서 답변을 찾았지만 내 질문에 답하는 답변을 찾지 못했습니다.방법 <=> 및 기타 질문

이 코드에 : 그래서 여기 내 질문입니다

class Post 
    require 'date' 
    include Comparable 
    attr_accessor :post_number, :author, :date 

    def initialize 

    end 

    def <=> (another_post) 
    self.date <=> another_post.date 
    end 
end 

방법 "< =>"수단을 무엇? post_number, : 작성자 및 변경 날짜의 사본입니까? 어쨌든이 방법이 효과가없는 것 같지만이 방법의 의미를 궁금해합니다.

두 번째 질문 : 이 코드를 발견 : a, b 및 c는 적절한 값을가집니다.

a = 0.1 * b if c? 

이의 다릅니다

if c? 
    a = 0.1 * b 
end 

음, 귀하의 답변에 감사 드리며 내 질문이 너무 바보가 아니라는 것을 희망한다. 감사합니다. Bdloul

+1

첫 번째 질문은 [Ruby 우주선 운영자 란 무엇입니까] (http://stackoverflow.com/questions/827649/what-is-the-ruby-spaceship-operator)를 참조하십시오. 동등한. –

+1

다음 번에는 질문을 개별적으로 질문하고 의미있는 제목을 부여하십시오. 나중에 다른 사용자가 쉽게 찾아 볼 수있는 지식 기반을 구축 할 수 있습니다. – samuil

답변

1

<=>입니다. Post.all.sort과 같은 작업을 수행 한 경우 sort 메서드는 Post이 게시 개체를 비교하는 방법을 정의하는지 확인합니다. 그렇지 않으면 상속 계층 구조를 정렬 할 때까지 상속 계층 구조를 위로 이동합니다.

<=> 이상한 보이지만 < 단지 조합이다 (다른 개체 이상의 오브젝트 이하) =는 (두 개체은 동일하다)과 >은 (다른 것보다 하나의 오브젝트 크다).

게시 된 코드에서 작성자는 두 개체를 비교하는 방법을 정의하는 방법을 만들고 있습니다. 특히, 그는 그들이 비교 될 방법이 .date 속성이 비교되는 방식에 근거한다고 썼다. 다시 말해서 2013 년 1 월 1 일부터 시작되는 게시물은 2013 년 1 월 2 일부터 시작되는 게시물 앞에옵니다.

다음 부분은 두 코드가 동일합니다. Ruby에서는 한 줄에 여러 조건을 작성할 수 있습니다. 이들은 모두 더 많은 예제를 제공하기 위해 모두 동일합니다.

# 1. 
a = 1 unless a == 0 
# or 
unless a == 0 
    a = 1 
end 

# 2. 
a += 1 while a < 10 
# or 
while a < 10 
    a += 1 
end 
+0

변경 표기법의 예가 잘못되었습니다. 확장 버전을 사용하면 'a' 변수가 정의되지 않은 경우 다르게 동작합니다. – samuil

+0

죄송 합니다만 이미 정의 된 것을 의미하지는 않습니다. 예제 주위의 코드에 신경 쓰지 않고 조건의 예를 보여주었습니다. – MrDanA

+0

요점은 수정 자 표기법이 매우 편리하지만 확장 표기법과 동일하지 않다는 것입니다. – samuil

관련 문제