能够在另一个变量的名称中使用变量吗?红宝石

时间:2015-01-16 23:17:31

标签: ruby variables syntax

所以我的目标是能够在#34;"循环并在每次迭代中创建一个新变量,其中包含"迭代计数"在该变量名称中并存储它以供以后在循环外使用。有关详细信息,请参见下文。

注意:代码在很多方面都显然是错误的,但是我这样写它是为了让它更清晰?关于我想要完成的事情。感谢您提供有关如何做到这一点的任何意见。

count = "4"
while count > "0"
  player"#{count}"_roll = rand(20)
  puts 'Player "#{count}" rolled: "#{player"#{count}"_roll}"'
  count -= 1
end

我的目标是能够在程序的后期部分(或多或少)访问在循环内创建的变量

puts player4_roll
puts player3_roll
puts player2_roll
puts player1_roll

关键是这些变量是A)在循环中创建的B)名称依赖于另一个变量输入,而C)可以在循环外部访问以供以后使用。

希望我的问题清楚明白,任何意见都将不胜感激。我对编程非常陌生,并试图让我的头脑更加复杂。我不确定在Ruby中是否可以做到这一点。谢谢!

2 个答案:

答案 0 :(得分:2)

我认为最好的方法是使用数组或哈希,数组就是这样的:

count = 0
array = []
while count < 4 do
  array[count] = rand(20)
  puts "Player #{count} rolled: #{array[count]}"
  count += 1
end

array.each do |var|
    puts var
end

您将结果存储在数组中,然后循环它。如果你想要循环的第二次迭代的结果,你可以这样做:

puts array[1]

如果你想使用哈希,你需要做一些修改:

count = 0
hash = {}
while count < 4 do
  hash["player#{count}_roll"] = rand(20)
  puts "Player #{count} rolled: #{hash["player#{count}_roll"]}"
  count += 1
end

hash.each do |key, var|
    puts var
end

如果你想要循环的第二次迭代的结果,你可以这样做:

puts hash["player1_roll"]

答案 1 :(得分:0)

您可以使用instance_variable_set设置变量并以此方式引用

  instance_variable_set("@player#{count}_roll", rand(20))