【发布时间】:2019-01-07 17:42:10
【问题描述】:
我正在使用库net/http,并试图检查响应是否为Net::HTTPResponse 类型。我试过了:
Net::HTTPUnknownResponse.kind_of? Net::HTTPResponse
# => false
怎么了?
【问题讨论】:
-
我看不出有什么问题。怎么了?你告诉我们。
我正在使用库net/http,并试图检查响应是否为Net::HTTPResponse 类型。我试过了:
Net::HTTPUnknownResponse.kind_of? Net::HTTPResponse
# => false
怎么了?
【问题讨论】:
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 的实例,而不是类本身。
【讨论】: