2013-05-17 2 views

Répondre

2

<=> n'est pas "dans" la méthode Ruby, #<=> est une méthode Ruby. Cette méthode est utilisée pour des objets comparables (membres d'ensembles ordonnés) pour gagner facilement la mise en œuvre de #<, #>, #== etc méthodes en incluant Comparable mixin.

class GradeInFiveLevelScale 
    include Comparable 
    attr_reader :grade 
    def initialize grade; @grade = grade end 
    def <=> other; other.grade <=> grade end 
    def to_s; grade.to_s end 
end 

a = GradeInFiveLevelScale.new 1 
b = GradeInFiveLevelScale.new 1 
c = GradeInFiveLevelScale.new 3 

a > b #=> false 
a >= b #=> true 
a > C#=> true 
2

< => est l'opérateur de comparaison combiné. Elle renvoie 0 si le premier opérande est égal à la seconde, 1 si le premier opérande est supérieur au second et -1 si le premier opérande est inférieur à la seconde.

Plus d'informations sur ce SO thread.

2

Lisez ceci Equality, Comparison and Uniqueness in Ruby. Beau blog c'est.

+0

Et voici un peu mince: En dehors de la comparaison à trois voies '# <=>', une autre méthode étrange que vous devez savoir est triple est égal à '# ===', ce qui est extrêmement important dans les instructions 'case', et moins dans les déclarations 'rescue'. Vérifiez également les méthodes '# eql' et' # equal'. –

+0

@BorisStitnicky '# === est moins important dans les déclarations de sauvetage. Pas compris. Pouvez-vous m'en dire plus ou me montrer des documents pour cela? Je n'étais pas au courant de l'utilisation '===' dans le sauvetage. –

+1

Une des choses que vous devez faire si vous voulez être bon en Ruby, c'est lire des livres, quelque chose que je ne fais plus souvent. Un de ces livres à recommander est _Exceptional Ruby_ par Avdi Grimm. Je n'ai pas lu ce livre, mais je le veux dans ma bibliothèque. J'ai appris à propos de la façon dont les exceptions sont appariées dans la déclaration 'rescue' de la conversation un peu fastidieuse d'Avdi: http://www.confreaks.com/videos/523-roa2011-exceptional-ruby –