我希望这样的东西能起作用:
while i < 3 do
puts i
@b[i] = Benchmark.new
i += 1
@a += 1
end
puts "Here is a #{@a}"
puts @b0.inspect
puts @b1.inspect
puts @b2.inspect
可悲的是,它根本不起作用。 [] =被认为是一种无法识别的方法!
答案 0 :(得分:5)
您也可以使用instance_variable_set
3.times{|i| instance_variable_set "@x#{i}", i }
@x1 # => 1
@x2 # => 2
虽然对于这个特殊任务你应该使用数组,但是使用大量变量代替列表是一个新手错误。
benchmarks = []
n.times { benchmarks << Benchmark.new } # or benchmarks = (0..n).map { Benchmark.new }
benchmarks.each do |bm|
# do stuff
end
答案 1 :(得分:3)
这显然是数组的工作,而不是许多实例变量。
benchmarks = number.times.map { Benchmark.new }
puts "Here is a #{number}"
benchmarks.each { |b| puts b.inspect }
答案 2 :(得分:0)
回答了我自己的问题! eval方法就是答案:
puts "Welcome to Benchmark 1.0! How many benchmarks do you wish to perform? (We recommend three)"
number = gets.chomp.to_i
@a = 0
i = 0
while i < number do
puts i
eval("@b#{i} = Benchmark.new")
i += 1
@a += 1
end
puts "Here is a #{@a}"
puts @b0.inspect
puts @b1.inspect
puts @b2.inspect