为什么 '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 本身。
我正在使用库 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 本身。