0

我希望这样的事情会起作用:

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

可悲的是,它根本不起作用。[]= 被视为一种无法识别的方法!

4

3 回答 3

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
于 2013-09-02T14:09:01.967 回答
3

这显然是数组的工作,而不是许多实例变量。

benchmarks = number.times.map { Benchmark.new }
puts "Here is a #{number}"
benchmarks.each { |b| puts b.inspect }
于 2013-09-02T14:21:14.590 回答
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
于 2013-09-02T14:07:02.520 回答