Dynamic class instantiation by iteration

F

Frisco Del Rosario

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.
 
S

Stefano Crocco

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
 
D

David A. Black

Hi --

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!
 
P

Phillip Gawlowski

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

David A. Black wrote:

|
| Make that Cat.new(n) :)

Hm. Shouldn't that be Cat.mew(n)? :p

SCNR.

- --
Phillip Gawlowski
Twitter: twitter.com/cynicalryan
Blog: 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

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

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

No members online now.

Forum statistics

Threads
473,982
Messages
2,570,185
Members
46,736
Latest member
AdolphBig6

Latest Threads

Top