Что значит сравнивать классы с операторами больше, чем `>` и меньше, чем `<`? - PullRequest
0 голосов
/ 05 февраля 2019

Я не нашел описания для операторов >, <, >=, <= в документации для Object и Class.

String > Object      # => false
BasicObject > Object # => true
String > Integer     # => nil

Ответы [ 4 ]

0 голосов
/ 05 февраля 2019

Поначалу это может быть не совсем понятно, но на самом деле > - это метод, поэтому вы можете попытаться получить дополнительную информацию об этом с помощью метода method:

String.method(:>)
# #<Method: Class(Module)#>>

Это означает, что метод определен в Module и вызывается для Class объекта.

0 голосов
/ 05 февраля 2019

Когда сравнение уровня класса выполнено, он ищет иерархию / отношение.

String > Object возвращает false, потому что Object является предком для String класса.

Аналогичное будет следоватьдля этой иерархии Object -> Numeric -> Integer

String > Integer возвращает ноль, поскольку оба класса не входят в одну и ту же иерархию / отношение.

0 голосов
/ 05 февраля 2019

Для сравнения используется Comparable .

Поскольку классы используют его или реализуют метод <=>, они могут сравнивать получатель с другим объектом, возвращая -1, 0или +1 в зависимости от того, меньше ли получатель, равен или больше другого объекта.

Но на уровне класса учитывается иерархия.

0 голосов
/ 05 февраля 2019

Как вы обнаружили, эти методы не определены ни для Object, ни для Class.

В вашем примере они определены в Module, который является родительским для Class.Читайте где-нибудь около здесь .

Когда вы хотите узнать, в каком классе определен метод, используйте owner.

String.method(:>).owner # => Module
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...