Почему '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, а не сам класс.

Другие вопросы по тегам