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 に答える