Как я могу узнать, унаследован ли класс от другого?Некоторые методы, такие как is_a? - PullRequest
4 голосов
/ 25 июля 2010

Простой пример:

class A
end

class B < A
end

Тогда, как я могу судить, наследуется ли класс B от класса A?Есть ли такой метод, как is_a? или, может быть, называется is_child_of??

Я не могу его найти.

Ответы [ 3 ]

9 голосов
/ 25 июля 2010

Вы можете использовать оператор <:

B < A будет истинным, если B является подклассом A.

1 голос
/ 25 июля 2010

В Ruby класс Object имеет метод kind_of?, который делает то, что вы хотите.Это также псевдоним is_a?:

module M; end
class A
  include M
end
class B < A; end
class C < B; end
b = B.new
b.kind_of? A   #=> true
b.is_of? B     #=> true
b.kind_of? C   #=> false
b.kind_of? M   #=> true

Кроме того, класс Class имеет метод superclass:

>> B.superclass
=> A

Обратите внимание, что вы можете узнать, какие методыобъект поддерживает, спрашивая его:

B.methods.sort

Вывод этой команды будет включать методы kind_of? / is_a? / superclass.

0 голосов
/ 25 июля 2010

Вы можете найти все определения методов для Ruby Объекты онлайн.

Ближайшим полезным методом будет is_a? или kind_of?, однако прочитайте документацию, чтобы убедиться, что это то, что вам нужно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...