2010-03-05 3 views
0

나는 Card 클래스를 가지고 있으며 > 연산자를 오버로드하여 다른 카드 (Ace가 왕보다 높거나 왕보다 크다거나 등)에 비교하려고합니다. 나는 내가 루비에 대해 거의 알지 못했던 것을 잊어 버렸고 어디에서 시작해야할지 모른다.루비 배열의 색인을 기준으로 한 항목 비교하기

class Card 
    @@RANKS = ['A', 'K', 'Q', 'J', 'T', '9', '8','7','6','5','4','3','2'] 
    attr_reader :rank 

    def initialize(str) 
    @rank = str[0,1] 
    end 

    def > (other) 
    #????? 
    end 
end 

답변

1

array.index 메서드를 사용할 수 있습니다. 다음 코드는 두 카드의 색인을 확인하고 other 카드가 현재 카드 뒤에 나타나는 경우 true을 반환합니다.

class Card 
    @@RANKS = ['A', 'K', 'Q', 'J', 'T', '9', '8','7','6','5','4','3','2'] 
    attr_reader :rank 

    def initialize(str) 
    @rank = str[0,1] 
    end 

    def > (other) 
    @@RANKS.index(other.rank) > @@RANKS.index(@rank) 
    end 
end 

ace = Card.new 'A' 
king = Card.new 'K' 
nine = Card.new '9' 

puts ace > king 
puts ace > nine 
puts nine > king 
2

나는 darrint에 동의합니다.

당신이 Comparable를 포함하고 => 다음 당신은 무료로 모든 다른 비교를 할 수있을 것입니다 <을 정의하면됩니다 필요로! 자신 만의 '>'를 정의하는 것보다 훨씬 더 많은 유연성을 제공합니다. 곡괭이 번호부 즉

: 는 "대등 믹스 인은 비교 연산자를 추가하는데 사용될 수있다 (<, < = ==,> =, 및>)? 사이뿐만 아니라, 방법에 이 작업을하기 위해서, Comparable은 그것을 사용하는 모든 클래스가 연산자 < =>을 정의한다고 가정합니다. 따라서 클래스 작성자는 하나의 메소드 < =>을 정의하고, Comparable을 포함하고, 여섯 개의 비교 함수를 무료로 얻습니다 . "

전체 예는 (무료 온라인) 곡괭이 책 형태로도 주문 가능합니다 http://ruby-doc.org/docs/ProgrammingRuby/html/tut_modules.html#S2 (문단의 몇 아래로 스크롤 '이나 mixin을 당신에게 멋지고 제어 방법을 제공 ..')

+0

아, 설명 주셔서 감사합니다. 좋은 링크도 있습니다. +1 – Kirschstein

관련 문제