Hi --

On Wed, 30 Apr 2008, Stefano Crocco wrote:

> 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)}

Make that Cat.new(n) :-)


David

-- 
Rails training from David A. Black and Ruby Power and Light:
   INTRO TO RAILS         June 9-12            Berlin
   ADVANCING WITH RAILS   June 16-19           Berlin
   INTRO TO RAILS         June 24-27           London (Skills Matter)
See http://www.rubypal.com for details and updates!