Je n'ai trouvé aucune description pour les opérateurs > , , > = , dans la documentation pour Object et Class.String > Object # => false
BasicObject > Object # => true
String > Integer # => nil
4 Réponses :
Comme vous l'avez constaté, ces méthodes ne sont définies ni pour Object ni pour Class .
Dans votre exemple, elles sont définies dans Lorsque vous voulez savoir dans quelle classe une méthode est définie, utilisez Module code>, qui est le parent de Class . Lisez quelque part ici . P > owner.String.method(:>).owner # => Module
Lorsque la comparaison au niveau de la classe est effectuée, elle recherche la hiérarchie / la relation.
String> Object renvoie false car Object est l'ancêtre de la classe String .
La même chose sera suivie pour cette hiérarchie Object -> Numeric -> Integer
String> Integer renvoie nil car les deux classes ne sont pas dans la même hiérarchie / relation.
Le Comparable est utilisé pour comparer.
Au fur et à mesure que les classes l'utilisent ou implémentent la méthode <=>, elles peuvent comparer le récepteur à un autre objet, renvoyant -1, 0 ou +1 selon que le récepteur est inférieur, égal ou supérieur à l'autre objet.
Mais au niveau de la classe, la hiérarchie est prise en considération.
Non ce n'est pas. Class.ancestors # => [Classe, Module, Objet, Kernel, BasicObject]
@sawa pouvez-vous détailler?
Ne voyez-vous pas que la liste d'ascendance n'inclut pas Comparable ?
Les instances d'une classe Comparable sont totalement ordonnées. Les modules (ou classes) sont partiellement ordonnés.
Donc, vous dites que ce n'est pas comparable, c'est une question de hiérarchie? Est la dernière phrase de ma réponse.
Ce n'est peut-être pas clair au début, mais > est en fait une méthode, vous pouvez donc essayer d'obtenir plus d'informations à ce sujet avec le méthode méthode:
String.method(:>) # #<Method: Class(Module)#>>
Ce qui signifie que la méthode est définie dans Module et est appelé sur un objet Class .
Consultez la documentation ruby: ruby-doc.org/core /Module.html#method-i-3C-3D-3E
Les docs mentionnent un bon mnémonique: < i> "
classe A impliqueA "Étant donné un récepteur
objqui répond à une méthodem,obj.method (: m) .ownervous dira où la méthodemest défini. PourA ,A.method (: <). Owner # => Module.