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!