Stefano Crocco
4/30/2008 7:23:00 AM
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