2010-05-12 12 views
9

est ici une partie de ma Note classe:Pouvez-vous définir <=> dans Ruby, puis avoir ==,>, <, > =, et <= défini automatiquement?

class Note 
    attr_accessor :semitones, :letter, :accidental 

    def initialize(semitones, letter, accidental = :n) 
    @semitones, @letter, @accidental = semitones, letter, accidental 
    end 

    def <=>(other) 
    @semitones <=> other.semitones 
    end 

    def ==(other) 
    @semitones == other.semitones 
    end 

    def >(other) 
    @semitones > other.semitones 
    end 

    def <(other) 
    @semitones < other.semitones 
    end 
end 

Il me semble qu'il devrait y avoir un module que je pouvais comprendre cela pourrait me donner mes égalité et opérateurs comparaison basée sur ma méthode <=>. Est-ce qu'il y a un?

Je suppose que beaucoup de gens rencontrent ce genre de problème. Comment le résolvez-vous habituellement? (Comment faites-vous DRY?)

Répondre

13

Oui seulement include Comparable - la seule exigence est d'avoir la méthode de vaisseau spatial <=> définie.

+0

ah génial! Je savais qu'il y aurait quelque chose, mais c'était plutôt difficile à chercher. : P Merci! –