我有一个类initialize
方法定义了一些实例变量并进行了一些计算。我需要创建该类的大约60个对象。每个对象的末尾都有一个ID号。 E.g:
object1 = Dynamic.new(x, y)
object2 = Dynamic.new(x, y)
object3 = Dynamic.new(x, y)
...
我可以手动定义它们,但这样效率很低。有没有办法动态创建每个对象?
答案 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
您的object2
,objects[0]
,...将分别对应objects[1]
,=C1=MIN($C1,$E1,$G1,$I1)
,...