# Determine if a value is an instance of String , or Array , o

**URL:** <https://www.ruby-forum.com/t/determine-if-a-value-is-an-instance-of-string-or-array-o/76741>\
**Category:** Rails\
**Created:** [March 4, 2006, 7:42pm UTC](https://www.ruby-forum.com/t/determine-if-a-value-is-an-instance-of-string-or-array-o/76741 "2006-03-04T19:42:59Z")\
**Posts on this page:** 7\
**Page:** 1

<div class="post-metadata">

**Author:** ![oo00oo](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/o/8797f3/32.png) [@oo00oo](https://www.ruby-forum.com/u/oo00oo)\
**Post date:** [March 4, 2006, 7:42pm UTC](https://www.ruby-forum.com/t/determine-if-a-value-is-an-instance-of-string-or-array-o/76741/1 "2006-03-04T19:42:59Z")

</div>

each loop inside a mixed hash  
I need to determine if the value is an instance of String  
How ?

hash.each do |k,v|  
if v ( instance of ) String  
hash[k] = v.capitalize  
enf  
end

---

<div class="post-metadata">

**Author:** ![oo00oo](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/o/8797f3/32.png) [@oo00oo](https://www.ruby-forum.com/u/oo00oo)\
**Post date:** [March 4, 2006, 7:58pm UTC](https://www.ruby-forum.com/t/determine-if-a-value-is-an-instance-of-string-or-array-o/76741/2 "2006-03-04T19:58:06Z")

</div>

On 3/4/06, oo00oo [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid) wrote:

> each loop inside a mixed hash  
> I need to determine if the value is an instance of String  
> How ?
> 
> hash.each do |k,v|  
> if v ( instance of ) String  
> hash[k] = v.capitalize  
> enf  
> end

Here’s two different ways of doing it … since I’m still pretty new to  
ruby, I’m not sure if either of them is the best way (both use  
capitalize!  
rather to capitalize to change the value “in-place”):

hash.each do |k,v|  
v.capitalize! rescue v  
end

OR

hash.each do |k,v|  
v.capitalize! if v.respond\_to? :capitalize  
end

Rick

---

<div class="post-metadata">

**Author:** ![oo00oo](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/o/8797f3/32.png) [@oo00oo](https://www.ruby-forum.com/u/oo00oo)\
**Post date:** [March 4, 2006, 8:10pm UTC](https://www.ruby-forum.com/t/determine-if-a-value-is-an-instance-of-string-or-array-o/76741/3 "2006-03-04T20:10:02Z")

</div>

hash.each{|k,v|  
v.capitalize! if v.is\_a? String  
}

Or use Rick’s “duck typing” approach.

oo00oo wrote:

> each loop inside a mixed hash  
> I need to determine if the value is an instance of String  
> How ?
> 
> hash.each do |k,v|  
> if v ( instance of ) String  
> hash[k] = v.capitalize  
> enf  
> end

---

<div class="post-metadata">

**Author:** ![oo00oo](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/o/8797f3/32.png) [@oo00oo](https://www.ruby-forum.com/u/oo00oo)\
**Post date:** [March 4, 2006, 8:10pm UTC](https://www.ruby-forum.com/t/determine-if-a-value-is-an-instance-of-string-or-array-o/76741/4 "2006-03-04T20:10:21Z")

</div>

Thanks for the tips  
inline rescue is nice !  
But I’m always searching a method to determine a type. For Arrays,  
Hashs…

---

<div class="post-metadata">

**Author:** ![oo00oo](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/o/8797f3/32.png) [@oo00oo](https://www.ruby-forum.com/u/oo00oo)\
**Post date:** [March 4, 2006, 8:16pm UTC](https://www.ruby-forum.com/t/determine-if-a-value-is-an-instance-of-string-or-array-o/76741/5 "2006-03-04T20:16:15Z")

</div>

object.is\_a?(ClassName) does this.

object.class returns the class.

oo00oo wrote:

> Thanks for the tips  
> inline rescue is nice !  
> But I’m always searching a method to determine a type. For Arrays,  
> Hashs…

---

<div class="post-metadata">

**Author:** ![oo00oo](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/o/8797f3/32.png) [@oo00oo](https://www.ruby-forum.com/u/oo00oo)\
**Post date:** [March 4, 2006, 10:38pm UTC](https://www.ruby-forum.com/t/determine-if-a-value-is-an-instance-of-string-or-array-o/76741/6 "2006-03-04T22:38:50Z")

</div>

Also worth mentioning that you can do this:

hash.each do |k, v|  
case v  
when String  
v.capitalize  
when Array  
# do something else  
else  
# do something else again  
end  
end

Pete Y.  
[http://9cays.com](http://9cays.com)

---

<div class="post-metadata">

**Author:** ![oo00oo](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/o/8797f3/32.png) [@oo00oo](https://www.ruby-forum.com/u/oo00oo)\
**Post date:** [March 5, 2006, 1:26am UTC](https://www.ruby-forum.com/t/determine-if-a-value-is-an-instance-of-string-or-array-o/76741/7 "2006-03-05T01:26:02Z")

</div>

hash = {‘a’ =\> ‘bob’, ‘b’ =\> 3, ‘c’ =\> ‘fred’ }

hash.each\_value {|d| d.capitalize! if d.is\_a?(String) }  
=\> {“a”=\>“Bob”, “b”=\>3, “c”=\>“Fred”}

So, to answer your question, use the is\_a? (or kind\_of?) method.

Bob S.  
[http://www.railtie.net/](http://www.railtie.net/)
