2010-05-12 5 views
9

Hier ist ein Teil meiner Note Klasse:Können Sie in Ruby <=> definieren und haben dann ==,>, <, > =, und <= automatisch definiert?

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 

Mir scheint es, als gäbe es ein Modul sein sollte, dass ich, dass mir meine Gleichheit und Vergleichsoperatoren geben auf der Grundlage meiner <=> Methode umfassen könnte könnte. Ist dort eines?

Ich vermute, viele Leute stoßen auf diese Art von Problem. Wie lösen Sie es normalerweise? (Wie machen Sie es trocken?)

Antwort

13

Yep nur include Comparable - die einzige Voraussetzung ist, das Raumschiff <=> Methode definiert zu haben.

+0

ah großartig! Ich wusste, dass es etwas geben würde, aber es war schwer zu suchen. : P Danke! –