我在>
和<
的文档中找不到关于运算符>=
,<=
,Object
,Class
的任何描述
String > Object # => false
BasicObject > Object # => true
String > Integer # => nil
答案 0 :(得分:6)
完成类级别比较后,它将查找层次结构/关系。
String > Object
返回false,因为Object
是String
类的祖先。
与此类似,Object -> Numeric -> Integer
String > Integer
返回nil,因为两个类的层次结构/关系不同。
答案 1 :(得分:4)
如您所见,这些方法没有为Object
或Class
定义。
在您的示例中,它们是在Module
的父级Class
中定义的。在here附近阅读。
如果您想知道在哪个类中定义了方法,请使用owner
。
String.method(:>).owner # => Module
答案 2 :(得分:1)
乍一看可能不清楚,但是>
实际上是一种方法,因此您可以尝试使用method
方法获取有关它的更多信息:
String.method(:>)
# #<Method: Class(Module)#>>
这意味着该方法在Module
中定义,并在Class
对象上调用。
答案 3 :(得分:0)
Comparable用于比较。
当类正在使用它或实现<=>方法时,它们可以将接收器与另一个对象进行比较,根据接收器是小于,等于还是大于,返回-1、0或+1。另一个对象。
但是在类级别上,要考虑层次结构。