2011-03-31 6 views
-4

Quelle est la signification de '< ==>' dans Ruby?Quelle est la signification de '<==>' dans Ruby?

Exemple: Le code provient de la classe suivante qui compare les numéros au format x.x.x,

def <==>(other) 
    # Some code here 
end 

Le code suivant provient de cette classe que le nombre de commandes comme x.x.x,

class Version 

    attr_reader :fst, :snd, :trd 
    def initialize(version="") 
     v = version.split(".") 
     @fst = v[0].to_i 
     @snd = v[1].to_i 
     @trd = v[2].to_i 
    end 

    def <=>(other) 
     return @fst <=> other.fst if ((@fst <=> other.fst) != 0) 
     return @snd <=> other.snd if ((@snd <=> other.snd) != 0) 
     return @trd <=> other.trd if ((@trd <=> other.trd) != 0) 
    end 

    def self.sort 
     self.sort!{|a,b| a <=> b} 
    end 

    def to_s 
     @sorted = @fst.to_s + "." + @snd.to_s + "." + @trd.to_s 
     #Puts out "#{@sorted}". 
    end 
end 
+7

Je ne pense pas que ce soit un code valide ... –

+0

Maintenant, je me demande [pourquoi il n'y a qu'un seul signe égal] (http://stackoverflow.com/questions/5508338/why-does-the-spaceship- operator-have-only-one-equal-sign-in-it). –

Répondre

12

C'est le spaceship operator. Cependant, il s'agit en fait de <=> (et non de <==>).

Bien que ce n'est pas son nom officiel, je suis sûr, c'est le nom le plus couramment utilisé pour cet opérateur. Il est un opérateur de comparaison où

  • Si autre est inférieur à soi, le retour 1,
  • Si autre est égal à soi-même, de retour 0
  • Si autre est supérieur à soi-même, de retour -1

C'est un opérateur puissant en ce que, en implémentant cela, vous pouvez faire le tri de votre propre type et participer à beaucoup d'autres subtilités, comme le mixin Enumerable.

3

Pourquoi ne l'essayez-vous pas simplement? En tapant simplement le code que vous avez posté, il est trivial de voir par vous-même que cela ne veut rien dire, puisque <==> n'est pas un nom de méthode valide dans Ruby. Le code que vous avez posté ne fera qu'élèver un SyntaxError.

Questions connexes