在ruby中动态创建变量

时间:2013-09-02 14:02:23

标签: ruby

我希望这样的东西能起作用:

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
可悲的是,它根本不起作用。 [] =被认为是一种无法识别的方法!

3 个答案:

答案 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