2010-03-05 7 views
0

J'ai une classe Card et je veux surcharger l'opérateur > pour comparer avec une autre carte (As est plus haut que roi, roi plus haut que reine, etc.). J'ai oublié le peu que je connaissais de Ruby et je n'ai aucune idée par où commencer.Comparer des éléments basés sur leur index dans un tableau en Ruby

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 

Répondre

1

Vous pouvez utiliser la méthode array.index. Le code suivant vérifie l'index des deux cartes et renvoie true si la carte other apparaît après la carte actuelle.

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

Je suis d'accord avec darrint.

Tout ce que vous avez à faire est de comparer et de définir < => et ensuite vous pourrez faire toutes les autres comparaisons gratuitement! Vous donner beaucoup plus de flexibilité que de simplement définir ">" par vous-même.

Dans les paroles du livre de pickaxe: « Le mixin Comparable peut être utilisé pour ajouter les opérateurs de comparaison (<, < =, ==,> = et>), ainsi que la méthode entre ?, à Pour que cela fonctionne, Comparable suppose que toute classe qui l'utilise définit l'opérateur < =>. Ainsi, en tant que writer de classe, vous définissez la méthode one, < =>, include Comparable, et obtenez six fonctions de comparaison gratuitement "

Un exemple complet est disponible dans le (gratuit en ligne) livre pickaxe: http://ruby-doc.org/docs/ProgrammingRuby/html/tut_modules.html#S2 (faites défiler quelques paragraphes «Mixins vous donner un moyen merveilleusement contrôlée ..)

+0

Ah, merci pour l'explication. Bon lien aussi. +1 – Kirschstein

Questions connexes