在Ruby中动态创建对象

时间:2016-05-13 00:02:54

标签: ruby

我有一个类initialize方法定义了一些实例变量并进行了一些计算。我需要创建该类的大约60个对象。每个对象的末尾都有一个ID号。 E.g:

object1 = Dynamic.new(x, y)
object2 = Dynamic.new(x, y)
object3 = Dynamic.new(x, y)
...

我可以手动定义它们,但这样效率很低。有没有办法动态创建每个对象?

3 个答案:

答案 0 :(得分:3)

您始终可以创建循环并将所有对象推送到数组中。知道哪个对象是每个对象,也可能需要一个数组位置。这不是你想要的(至少我不这么认为),但它应该足够了。

class Dynamic
@@instances_of_class = 0
  def initialize(x,y)
  #...
  @array_position = @@instances_of_class
  @@instances_of_class += 1
  end
end

ary = []
50.times do 
ary << Dynamic.new(x,y)
end

编辑:如评论中所述,此解决方案可能会在您更改阵列时导致错误,因此这是另一种解决方案。

require 'File.rb'
i = 1
varFile = File.open("File.rb","a+")
50.times do
varFile.puts "variable#{i} = Object.new"
i += 1
end

File.rb内部将有50个可以使用的唯一命名变量。

答案 1 :(得分:1)

我很想知道你为什么需要这个。这是一个不寻常的要求,通常意味着您可以避免问题而不是解决问题。我认为TheLuigi的解决方案可行,但如果你使用类变量,那么这些Id将在多个类之间共享。您可以改为使用实例变量,如下所示:

class A
  def self.next_id
    @id ||= 0 ; @id += 1
  end

  def initialize
    @id = A.next_id
  end
end

A.new
# => #<A:0x007fd6d414c640 @id=1>
A.new
# => #<A:0x007fd6d41454a8 @id=2>

答案 2 :(得分:-1)

如果您只想从变量访问60个对象,则应将它们放在由单个变量引用的数组中。

object1

您的object2objects[0],...将分别对应objects[1]=C1=MIN($C1,$E1,$G1,$I1) ,...