2010-05-12 23 views
9

Dưới đây là một phần của lớp Note tôi:Bạn có thể xác định <=> trong Ruby và sau đó có ==,>, <, > = và <= được xác định tự động không?

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 

Dường như với tôi như không nên có một module mà tôi có thể bao gồm có thể cung cấp cho tôi các nhà khai thác bình đẳng và so sánh của tôi dựa trên phương pháp <=> tôi. Có cái nào không?

Tôi đoán rất nhiều người đã gặp phải vấn đề này. Làm thế nào để bạn thường giải quyết nó? (Làm thế nào để bạn làm cho nó KHÔ?)

Trả lời

13

Chỉ cần include Comparable - yêu cầu duy nhất là phải có phương thức tàu vũ trụ <=> được xác định.

+0

ah tuyệt vời! Tôi biết có gì đó, nhưng thật khó để tìm kiếm. : P Cảm ơn! –

Các vấn đề liên quan