如何创建一个创建多个对象的类?

时间:2015-05-19 19:15:44

标签: ruby class object

如何创建一个创建多个类的类。我有这个:

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

但是将堆栈级别返回到深层。

3 个答案:

答案 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

如果您希望其他类创建xPerson个实例,您可以使用以下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">]