我们说我有一个重复1000次的循环。
在循环之前,我设置了1000个变量,如下所示:
@n1 = "blabla"
@n2 = "blabla"
@n3 = "blabla"
@n4 = "blabla"
...
我还有一个变量@count
来计算循环所在的迭代,即。它从1开始,每个循环增加1。 我想要做的是@n1
打印@count = 1
,@n2
打印@count = 2
,依此类推。换句话说,我希望ruby使用@count
的值来决定使用哪个@n_
变量。我不想使用条件语句,因为我'需要1000个。
这样的事情:
@count = 1
if @count < 1001
puts @("n + @count")
@count = @count + 1
end
有办法做到这一点吗?
答案 0 :(得分:2)
假设您有一个名为foo的实例,它有一千个实例变量,可以循环遍历它们:
foo.instance_variables.each do |v|
p foo.instance_variable_get(v)
end
也就是说,您也可以使用字符串名称来获取它们:
1000.times do |count|
p foo.instance_variable_get("@n#{count}")
end
答案 1 :(得分:1)
是的,你可以这样做:
if @count < 1001
instance_variable_set("@#{@count}", @count + 1)
end
存储在哈希中会更加惯用,例如
h = {}
if @count < 1001
h[@count] = @count + 1
end
答案 2 :(得分:1)
虽然您可以使用类似instance_variable_get
的内容,但通常会使用数组或散列来存储字符串:
n = ["blabla", "blabla", "blabla", ... ]
count = 0
if count < 1000
puts n[count]
count += 1
end