Как проверить, является ли переменная экземпляром класса? - PullRequest
59 голосов
/ 06 августа 2010

В Java вы можете сделать instanceof. Есть ли в Ruby эквивалент?

Ответы [ 4 ]

122 голосов
/ 06 августа 2010

Это почти точно так же. Вы можете использовать Object s instance_of? метод:

"a".instance_of? String # => true
"a".instance_of? Object # => false

Ruby также имеет методы is_a? и kind_of? (эти 2 являются псевдонимами и работают точно так же), что возвращает true - одно из совпадений суперкласса:

"a".is_a? String # => true
"a".is_a? Object # => true
11 голосов
/ 10 мая 2014

kind_of? и is_a? являются синонимами.Они эквивалентны Ruby для Java instanceof.

instance_of? отличается тем, что возвращает true, только если объект является экземпляром этого точного класса, а не подклассом.

6 голосов
/ 06 августа 2010

Посмотрите на instance_of? и kind_of? методы. Вот ссылка на документ http://ruby -doc.org / core / classes / Object.html # M000372

5 голосов
/ 06 августа 2010

У меня был успех с klass, который возвращает объект класса. Похоже, это зависит от Rails.

Пример использования:

class Foo
end

Foo.new.klass
# => Foo

Foo.new.klass == Foo
# => true

Foo.new.klass == "Foo"
# => false

Существует также метод, который выполняет это: Object.is_a?, который принимает объект класса в качестве аргумента и возвращает истину, если self является экземпляром класса или экземпляром подкласса.

...