# Dynamic class instantiation by iteration

**URL:** <https://www.ruby-forum.com/t/dynamic-class-instantiation-by-iteration/136272>\
**Category:** Ruby\
**Created:** [April 30, 2008, 9:20am UTC](https://www.ruby-forum.com/t/dynamic-class-instantiation-by-iteration/136272 "2008-04-30T09:20:50Z")\
**Posts on this page:** 5\
**Page:** 1

<div class="post-metadata">

**Author:** ![Frisco\_Del\_R](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/f/eb9ed0/32.png) [@Frisco\_Del\_R](https://www.ruby-forum.com/u/Frisco_Del_R)\
**Post date:** [April 30, 2008, 9:20am UTC](https://www.ruby-forum.com/t/dynamic-class-instantiation-by-iteration/136272/1 "2008-04-30T09:20:50Z")

</div>

I’m curious as to why the following does not create three instances of  
class Cat:

class Cat  
def initialize(name)  
@name = name  
end  
end

toons = [“Felix”, “Garfield”, “Heathcliff”]

toons.each {|t| t = Cat.new(t)}

In irb, the last input and output are:

irb(main):008:0\> toons.each {|t| t=Cat.new(t)}  
=\> [“Felix”, “Garfield”, “Heathcliff”]

which I don’t understand.

---

<div class="post-metadata">

**Author:** ![Frisco\_Del\_R](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/f/eb9ed0/32.png) [@Frisco\_Del\_R](https://www.ruby-forum.com/u/Frisco_Del_R)\
**Post date:** [April 30, 2008, 9:23am UTC](https://www.ruby-forum.com/t/dynamic-class-instantiation-by-iteration/136272/2 "2008-04-30T09:23:50Z")

</div>

On Wednesday 30 April 2008, Frisco Del R. wrote:

> toons = [“Felix”, “Garfield”, “Heathcliff”]
> 
> toons.each {|t| t = Cat.new(t)}
> 
> In irb, the last input and output are:
> 
> irb(main):008:0\> toons.each {|t| t=Cat.new(t)}  
> =\> [“Felix”, “Garfield”, “Heathcliff”]
> 
> which I don’t understand.

Your code does create three instances of Cat, but they’re thrown away  
immediately, since you don’t use them. Array#each always return the  
receiver  
(in your case, the array [“Felix”, “Garfield”, “Heathcliff”]),  
regardless of  
the return value of the block. If you want to obtain an array with the  
three  
instances of Cat, use Array#map instead:

cats = toons.map{|n| Cat.new(name)}

I hope this helps

Stefano

---

<div class="post-metadata">

**Author:** ![Frisco\_Del\_R](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/f/eb9ed0/32.png) [@Frisco\_Del\_R](https://www.ruby-forum.com/u/Frisco_Del_R)\
**Post date:** [April 30, 2008, 1:19pm UTC](https://www.ruby-forum.com/t/dynamic-class-instantiation-by-iteration/136272/3 "2008-04-30T13:19:30Z")

</div>

Hi –

On Wed, 30 Apr 2008, Stefano C. wrote:

> > which I don’t understand.
> 
> Your code does create three instances of Cat, but they’re thrown away  
> immediately, since you don’t use them. Array#each always return the receiver  
> (in your case, the array [“Felix”, “Garfield”, “Heathcliff”]), regardless of  
> the return value of the block. If you want to obtain an array with the three  
> instances of Cat, use Array#map instead:
> 
> cats = toons.map{|n| Cat.new(name)}

Make that Cat.new(n) 🙂

David

---

<div class="post-metadata">

**Author:** ![Frisco\_Del\_R](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/f/eb9ed0/32.png) [@Frisco\_Del\_R](https://www.ruby-forum.com/u/Frisco_Del_R)\
**Post date:** [April 30, 2008, 4:20pm UTC](https://www.ruby-forum.com/t/dynamic-class-instantiation-by-iteration/136272/4 "2008-04-30T16:20:25Z")

</div>

On Wednesday 30 April 2008, David A. Black wrote:

> > cats = toons.map{|n| Cat.new(name)}
> 
> Make that Cat.new(n) 🙂

Of course

Stefano

---

<div class="post-metadata">

**Author:** ![Frisco\_Del\_R](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/f/eb9ed0/32.png) [@Frisco\_Del\_R](https://www.ruby-forum.com/u/Frisco_Del_R)\
**Post date:** [April 30, 2008, 4:32pm UTC](https://www.ruby-forum.com/t/dynamic-class-instantiation-by-iteration/136272/5 "2008-04-30T16:32:49Z")

</div>

-----BEGIN PGP SIGNED MESSAGE-----  
Hash: SHA1

David A. Black wrote:

|  
| Make that Cat.new(n) 🙂

Hm. Shouldn’t that be Cat.mew(n)? 😛

SCNR.

* * *

Phillip G.  
Twitter: [twitter.com/cynicalryan](http://twitter.com/cynicalryan)  
Blog: [http://justarubyist.blogspot.com](http://justarubyist.blogspot.com)

You watch a talk show recently? They’re doing one next month on a  
normal, happy heterosexual couple, assuming they can find one.  
~ – Professor Ralph Noble, RPI, Psychology of Motivation, Fall 1991  
-----BEGIN PGP SIGNATURE-----  
Version: GnuPG v1.4.8 (MingW32)  
Comment: Using GnuPG with Mozilla - [http://enigmail.mozdev.org](http://enigmail.mozdev.org)

iEYEARECAAYFAkgYguAACgkQbtAgaoJTgL+7XQCfcoRXtIQAowRjrAeQtgdxjOQX  
Q0oAoJ9RuAnFK6bhdXWjMi5NTwIpnVhV  
=D5D5  
-----END PGP SIGNATURE-----
