循环遍历Ruby中的变量

时间:2017-01-17 10:37:55

标签: ruby-on-rails ruby

我需要使用如下名称迭代变量:

variable1
variable2
variable3
...
variable15

我该怎么做?

1 个答案:

答案 0 :(得分:5)

首先,它似乎是一个非常糟糕的设计。如果您的数据应该被迭代,您需要使用适当的数据结构(Ruby在标准库中有HashArray

但你可以这样做。有eval和更多惯用local_variable_get方法,这可能会有所帮助。

v1 = 1
v2 = "chair"
v3 = :boo

(1..3).each do |i|
  puts binding.local_variable_get("v#{i}")
end
#=> 1
#=> chair
#=> boo

但是,同样,它们都是非常特殊的工具,在这种情况下不应该使用它们。你应该重新考虑你的方法。如果变量的数量不大并且每个变量本身都有一定意义,则可以在迭代之前构造一个数组。

[v1, v2, v3].each{ |v| puts v }

其他方法是从一开始就使用Array。您将使用Array

的索引,而不是使用编号变量
my_data = []
my_data[0] = 1
my_data[1] = "chair"
my_data[2] = :foo

my_data.each{ |v| puts v }

或者,当您的数据应按名称调用时,您可以使用Hash

my_data = {}
my_data[:first] = 1
my_data[:second] = "chair"
my_data[:third] = :foo

my_data.each{ |k, v| puts k, v }