为什么 'Net::HTTPUnknownResponse.kind_of? Net::HTTPResponse' return 'false'?

Why does 'Net::HTTPUnknownResponse.kind_of? Net::HTTPResponse' return 'false'?

我正在使用库 net/http,并正在尝试检查响应类型是否为 Net::HTTPResponse。我试过了:

Net::HTTPUnknownResponse.kind_of? Net::HTTPResponse
# => false

怎么了?

kind_of?用于检查对象是否是给定class的实例,例如

1.kind_of? Numeric
#=> true

您不能只用 class:

替换实例
Integer.kind_of? Numeric
#=> false

因为Integer(class)是Class的实例:

Integer.kind_of? Class
#=> true

相反,您可以使用 < 来检查接收者是否是给定 class(或模块,不限于 classes)的子class :

Integer < Numeric
#=> true

Integer < Comparable
#=> true

在您的具体情况下:

require 'net/http'

Net::HTTPUnknownResponse < Net::HTTPResponse
#=> true

请注意,上面的代码将始终 return true(除非您更改class 层次结构)。如果您正在使用 net/http 库,您的响应对象应该是 Net::HTTPUnknownResponse 实例 ,而不是 class 本身。