是否可以将一个变量的值插入另一个变量的名称中?

时间:2016-02-13 01:00:49

标签: ruby-on-rails ruby variables

我们说我有一个重复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

有办法做到这一点吗?

3 个答案:

答案 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