比较大于“>”和小于“ <”运算符的类是什么意思?

时间:2019-02-05 10:11:21

标签: ruby

我在><的文档中找不到关于运算符>=<=ObjectClass的任何描述

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

4 个答案:

答案 0 :(得分:6)

完成类级别比较后,它将查找层次结构/关系。

String > Object返回false,因为ObjectString类的祖先。

与此类似,Object -> Numeric -> Integer

String > Integer返回nil,因为两个类的层次结构/关系不同。

答案 1 :(得分:4)

如您所见,这些方法没有为ObjectClass定义。

在您的示例中,它们是在Module的父级Class中定义的。在here附近阅读。

如果您想知道在哪个类中定义了方法,请使用owner

String.method(:>).owner # => Module

答案 2 :(得分:1)

乍一看可能不清楚,但是>实际上是一种方法,因此您可以尝试使用method方法获取有关它的更多信息:

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

这意味着该方法在Module中定义,并在Class对象上调用。

答案 3 :(得分:0)

Comparable用于比较。

当类正在使用它或实现<=>方法时,它们可以将接收器与另一个对象进行比较,根据接收器是小于,等于还是大于,返回-1、0或+1。另一个对象。

但是在类级别上,要考虑层次结构。