我需要使用如下名称迭代变量:
variable1
variable2
variable3
...
variable15
我该怎么做?
答案 0 :(得分:5)
首先,它似乎是一个非常糟糕的设计。如果您的数据应该被迭代,您需要使用适当的数据结构(Ruby在标准库中有Hash
和Array
。
但你可以这样做。有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 }