Почему 'Net::HTTPUnknownResponse.kind_of? Net::HTTPResponse'вернуть'false'?
Я пользуюсь библиотекой net/http
и пытаюсь проверить, является ли ответ типом Net::HTTPResponse
, Я старался:
Net::HTTPUnknownResponse.kind_of? Net::HTTPResponse
# => false
В чем дело?
1 ответ
Решение
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
, а не сам класс.