From: Stefano Crocco Date: 2008-04-30T16:23:29+09:00 Subject: Re: Dynamic class instantiation by iteration On Wednesday 30 April 2008, Frisco Del Rosario wrote: > 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. 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