Как проверить, является ли переменная экземпляром класса?

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

Ответ 1

Это почти то же самое. Вы можете использовать метод Object 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

Ответ 2

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

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

Ответ 4

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

Использование образца:

class Foo
end

Foo.new.klass
# => Foo

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

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

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