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

时间:2018-07-31 10:42:18

标签: ruby net-http

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

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

怎么了?

1 个答案:

答案 0 :(得分:4)

kind_of?用于检查对象是否为给定类的实例

1.kind_of? Numeric
#=> true

您不能仅将实例替换为其类:

Integer.kind_of? Numeric
#=> false

因为Integer(该类)是Class的实例:

Integer.kind_of? Class
#=> true

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

Integer < Numeric
#=> true

Integer < Comparable
#=> true

在您的特定情况下:

require 'net/http'

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

请注意,以上代码将总是返回true(除非您更改类层次结构)。如果您使用的是net/http库,则响应对象应该是Net::HTTPUnknownResponse instance ,而不是类本身。