# Type of class

**URL:** <https://www.ruby-forum.com/t/type-of-class/86769>\
**Category:** Ruby\
**Created:** [February 25, 2007, 7:27pm UTC](https://www.ruby-forum.com/t/type-of-class/86769 "2007-02-25T19:27:11Z")\
**Posts on this page:** 4\
**Page:** 1

<div class="post-metadata">

**Author:** ![j-merrill](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/j/aeb1de/32.png) [@j-merrill](https://www.ruby-forum.com/u/j-merrill)\
**Post date:** [February 25, 2007, 7:27pm UTC](https://www.ruby-forum.com/t/type-of-class/86769/1 "2007-02-25T19:27:11Z")

</div>

Hi  
How do I know if a variable is an instace of a given class

I have a method that returns a String or an Array and I have to know  
outside if the returned object is and String or an Array.

Is beacuse this :  
# File vendor/rails/activerecord/lib/active\_record/validations.rb,  
line 100  
100: def on(attribute)  
101: errors = @errors[attribute.to\_s]  
102: return nil if errors.nil?  
103: errors.size == 1 ? errors.first : errors  
104: end

How do I know that call on method on returned and array or an string?

Thanks

---

<div class="post-metadata">

**Author:** ![j-merrill](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/j/aeb1de/32.png) [@j-merrill](https://www.ruby-forum.com/u/j-merrill)\
**Post date:** [February 25, 2007, 8:24pm UTC](https://www.ruby-forum.com/t/type-of-class/86769/2 "2007-02-25T20:24:55Z")

</div>

Alle domenica 25 febbraio 2007, J. mp ha scritto:

> 101: errors = @errors[attribute.to\_s]  
> 102: return nil if errors.nil?  
> 103: errors.size == 1 ? errors.first : errors  
> 104: end
> 
> How do I know that call on method on returned and array or an string?
> 
> Thanks

The is\_a? method tells whether the receiver is an instance of the class  
passed  
as argument or of one of its derived class:

a=[1,2,3]

a.is\_a?(Array)  
=\> true  
a.is\_a?(String)  
=\> false

If you need to know whether an object is an instance of exactly a  
specific  
class (not of derived class), you can use the == on the class:

class A  
end

class B \< A  
end

b=B.new  
b.is\_a?(A)  
=\> true  
b.class==A  
=\> false  
b.class==B  
=\> true

I hope this helps

Stefano

---

<div class="post-metadata">

**Author:** ![j-merrill](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/j/aeb1de/32.png) [@j-merrill](https://www.ruby-forum.com/u/j-merrill)\
**Post date:** [February 26, 2007, 12:17am UTC](https://www.ruby-forum.com/t/type-of-class/86769/3 "2007-02-26T00:17:16Z")

</div>

Stefano C. wrote:

> Alle domenica 25 febbraio 2007, J. mp ha scritto:
> 
> > 101: errors = @errors[attribute.to\_s]  
> > 102: return nil if errors.nil?  
> > 103: errors.size == 1 ? errors.first : errors  
> > 104: end
> > 
> > How do I know that call on method on returned and array or an string?
> > 
> > Thanks
> 
> The is\_a? method tells whether the receiver is an instance of the class  
> passed  
> as argument or of one of its derived class:
> 
> a=[1,2,3]
> 
> a.is\_a?(Array)  
> =\> true  
> a.is\_a?(String)  
> =\> false
> 
> If you need to know whether an object is an instance of exactly a  
> specific  
> class (not of derived class), you can use the == on the class:
> 
> class A  
> end
> 
> class B \< A  
> end
> 
> b=B.new  
> b.is\_a?(A)  
> =\> true  
> b.class==A  
> =\> false  
> b.class==B  
> =\> true
> 
> I hope this helps
> 
> Stefano  
> Thanks Stefano,  
> Meanwhile I found (before seeing your response) another way, don’t know  
> which one is the best, but also works

a.instance\_of? Array

Maybe they are the same methods but one is alias of the other? Or  
there’s any really difference between them?

Thanks again.

---

<div class="post-metadata">

**Author:** ![j-merrill](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/j/aeb1de/32.png) [@j-merrill](https://www.ruby-forum.com/u/j-merrill)\
**Post date:** [February 26, 2007, 2:20am UTC](https://www.ruby-forum.com/t/type-of-class/86769/4 "2007-02-26T02:20:32Z")

</div>

J. mp wrote:

> a.instance\_of? Array

and kind\_of?, and (Array === a)… check them all out  
and learn what they do.
