jantzeno
(jantzeno)
1
I have a few questions about class instantiation.
Say I have a class:
class Person
attr_accessor :name, :age
end
And an array:
names = ["john", "jane"]
Is it possible to instantiate a class using a string from the array so
I get something equal to:
john = Person.new
jane = Person.new
v/r,
names.each do |n|
eval n + ' = Person.new'
end
I'm sure there is a neater solution to this, but I'll put this forward for now.
Douglas F Shearer
dougal.s@gmail.com
···
On 14 Aug 2007, at 22:24, jantzeno wrote:
Is it possible to instantiate a class using a string from the array so
jantzeno wrote:
I have a few questions about class instantiation.
Say I have a class:
class Person
attr_accessor :name, :age
end
And an array:
names = ["john", "jane"]
Is it possible to instantiate a class using a string from the array so
I get something equal to:
john = Person.new
jane = Person.new
v/r,
You can, but it might be better to do something like this if you have
lots of names in your names array:
people = Array.new ;
names.each_with_index {|n,i|
people[i] = Person.new ;
people[i].name = n ;
}
Todd
···
--
Posted via http://www.ruby-forum.com/\.
hi its seems like you have done a hard work on it. I have got lots of
information from your post. Really appreciate your work.!! It was
describe very nicely keep us doing good work..
···
--
Posted via http://www.ruby-forum.com/.
Hi --
Is it possible to instantiate a class using a string from the array so
names.each do |n|
eval n + ' = Person.new'
end
That won't work, both because it's inside a block:
1.times do
david = 1
end
p david # error -- undefined
and because eval creates its own binding for local variable
assignments:
eval("a = 1")
p a
For both reasons, the variable would already have to be in view before
the eval.
The best and most common advice given in response to this question is:
do it with a hash instead, like this:
people = {}
names.each {|name| people[name] = Person.new }
David
···
On Wed, 15 Aug 2007, Douglas F Shearer wrote:
On 14 Aug 2007, at 22:24, jantzeno wrote:
--
* Books:
RAILS ROUTING (new! http://www.awprofessional.com/title/0321509242\)
RUBY FOR RAILS (http://www.manning.com/black\)
* Ruby/Rails training
& consulting: Ruby Power and Light, LLC (http://www.rubypal.com)
jantzeno
(jantzeno)
6
The best and most common advice given in response to this question is:
do it with a hash instead, like this:
people = {}
names.each {|name| people[name] = Person.new }
This was going to be my next question.
Then I can do a:
people["john"].name = "john"
Brilliant, thanks.