Ruby 能够在另一个变量中使用一个变量';她叫什么名字?红宝石

Ruby 能够在另一个变量中使用一个变量';她叫什么名字?红宝石,ruby,variables,syntax,Ruby,Variables,Syntax,因此,我的目标是能够运行一个“while”循环,并在每次迭代中创建一个新的变量,该变量包括该变量名称中的“迭代计数”,并将其存储在循环外供以后使用。有关更多详细信息,请参见下文 注意:代码在很多方面显然是错误的,但我这样写是为了让它更清楚?至于我想完成什么。感谢您对如何实现这一点的任何意见 count = "4" while count > "0" player"#{count}"_roll = rand(20) puts 'Player "#{count}" rolled: "#

因此,我的目标是能够运行一个“while”循环,并在每次迭代中创建一个新的变量,该变量包括该变量名称中的“迭代计数”,并将其存储在循环外供以后使用。有关更多详细信息,请参见下文

注意:代码在很多方面显然是错误的,但我这样写是为了让它更清楚?至于我想完成什么。感谢您对如何实现这一点的任何意见

count = "4"
while count > "0"
  player"#{count}"_roll = rand(20)
  puts 'Player "#{count}" rolled: "#{player"#{count}"_roll}"'
  count -= 1
end
然后,我的目标是能够在程序的后面部分(或多或少)访问从循环中创建的变量

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


希望我的问题能清楚地表达出来,我们将非常感谢您的任何意见。我对编程非常陌生,试图让我的头脑围绕一些更复杂的想法。我不确定这是否可以在Ruby中实现。谢谢

您可以使用
instance\u variable\u set
设置变量,并以这种方式引用它

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

我认为最好的方法是使用数组或散列,数组是这样的:

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]
puts hash["player1_roll"]
如果要使用哈希,需要进行一些修改:

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

这是为了调试吗?@Anthony我对编程如此陌生,以至于我甚至不确定什么是调试,但我正在编写的代码是虚拟代码,目的是找到一个答案,以便稍后在我正在制作的德克萨斯Hold Em风格的小游戏中实现。基本上,这部分代码用于计算玩家发了什么牌,然后创建一个变量“player_x_hand”来保存牌的字符串值(其中x=迭代中的计数),如果这一切都有意义的话……我很确定这个问题可以用另一种方式解决。有一些元编程方法可以创建变量,但我怀疑它在这种情况下是否有用。你为什么不把纸卷作为数据存储在一个数组中呢?@daremkd Yea我最近开始尝试用散列来存储卡片值,但由于这是我最初的想法,我想在放弃它之前检查一下它是否可行。不过,感谢您的输入:)运行该程序:
Player“{count}”滚动:“@Player{count}”滚动:“@Player}{count}”滚动:“@Player}{count}”滚动:“@Player}{count}”滚动:“@Player}{count}滚动:“@Player}{count count滚动”
滚动:“@Player}{count count count
我需要:
Player 4 rolled:15
Player 3 rolled:20
Player 2 rolled:2
Player 1 rolled:12
对不起,我只是从来没有听说过instance\u variable\u之前是否设置过,可能有点困惑?我认为哈希的想法肯定更适合我的目的,尽管加入了你的代码和运行它返回
14:语法错误,意外的tIDENTIFIER,应为关键字\u do或“{”或“('puts hash{“player1\u roll”}
14:语法错误,意外的$end,应为关键字\u end put hash{“player1\u roll”}^
总体而言,我认为如果我能清除错误,这将非常有效。谢谢!忘记错误。这是我的错,因为我复制了“如果你想要循环第二次迭代的结果,你可以这样做:”到代码中。效果非常好。再次感谢!
puts hash["player1_roll"]