2010-05-12 4 views
9

Ecco parte della mia classe Note:Puoi definire <=> in Ruby e quindi avere ==,>, <, > = e <= definito automaticamente?

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 

Mi sembra che ci dovrebbe essere un modulo che ho potuto comprendere che mi potrebbe dare i miei operatori di uguaglianza e di confronto sulla base di mio metodo <=>. Ce n'è uno?

Immagino che molte persone incontrino questo tipo di problema. Come lo risolvi di solito? (Come si fa a renderlo ASCIUTTO?)

risposta

13

Sì, solo include Comparable - l'unico requisito è quello di definire il metodo dell'astronave <=>.

+0

ah fantastico! Sapevo che ci sarebbe stato qualcosa, ma era piuttosto difficile da cercare. : P Grazie! –