私はこのようなものがうまくいくことを望んでいました:
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
残念ながら、まったく機能しません。[]= は認識されていないメソッドと見なされます!
私はこのようなものがうまくいくことを望んでいました:
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
残念ながら、まったく機能しません。[]= は認識されていないメソッドと見なされます!
使用することもできます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
これは明らかに配列の仕事であり、多くのインスタンス変数の仕事ではありません。
benchmarks = number.times.map { Benchmark.new }
puts "Here is a #{number}"
benchmarks.each { |b| puts b.inspect }
私自身の質問に答えました!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