如何创建一个创建多个类的类。我有这个:
class Person
attr_accessor :name
@name = name
def initialize
Person.new
Person.new
Person.new
Person.new
Person.new
Person.new
Person.new
Person.new
end
end
但是将堆栈级别返回到深层。
答案 0 :(得分:1)
我还不清楚你想从哪里获取名字 - 外部文件?手动输入?数据库?
无论如何,你可能会做类似的事情:
class Person
attr_accessor :name
def initialize(name)
self.name = name
end
end
##some sort of input goes here and creates the array of names
arrayofnames = [name1,name2,name3]
arrayofnames.each do |person|
Person.new(person)
end
作为相同枚举的一部分,您可以将每个新人放入一个数组中,或将它们存储在其他地方供以后使用。在这里,我构建了类并将其分别添加到了它中,尽管您可以在类本身中构建相同的枚举。
希望有所帮助,
答案 1 :(得分:0)
您面临的问题是您正在创建一个人,而这个人又创建了10个其他人对象,这些对象都返回10个人对象。这将无限期地继续下去。 你想要的是:
class Person
attr_accessor :name
@name = name
end
class People
@people
def initialize()
people = []
for i in 0..10
people[i] = Person.new
end
end
end
这会创建另一个对象,而该对象又包含10个Person对象。这样就无法发生同样的递归问题。
答案 2 :(得分:0)
首先,这是你的Person
课程:
class Person
attr_accessor :name
def initialize(name)
@name = name
end
end
如果您希望其他类创建x
个Person
个实例,您可以使用以下PeopleCreator
类:
class PeopleCreator
def self.create_person_for(names)
new.create(names)
end
def create(names)
names.map { |name| Person.new(name) }
end
end
我在class
中使用了PeopleCreator
方法,可以轻松调用以下内容:
names = %w(John Jane Jake)
PeopleCreator.create_person_for(names)
# => [#<Person:0x0000000a743150 @name="John">, #<Person:0x0000000a743128 @name="Jane">, #<Person:0x0000000a743100 @name="Jake">]