创建从#{}命名的变量?

时间:2013-07-17 18:47:49

标签: ruby

我有以下代码:

3.times do |n|
    "project#{n}" = FactoryGirl.create(:project, :title => "Project #{n}")
end

这显然不起作用...有没有人知道如何制作循环,我可以使用'本地循环变量'来改变变量名,以生成很多变量,如project1,project2,projekt3?

3 个答案:

答案 0 :(得分:6)

你能用哈希吗?

project = {}
3.times do |n|
    project[n] = FactoryGirl.create(:project, :title => "Project #{n}")
end

您可以使用project[1] ...

访问数据

答案 1 :(得分:4)

您可以使用Hashes,如knut建议的那样,或者您可以使用数组 - 因为您从0开始并连续向上移动。

project = Array.new(3)
3.times do |n|
  project[n] = FactoryGirl.create(:project, :title => "Project#{n}")
end

或者更简单:

project = []
3.times do |n|
  project << FactoryGirl.create(:project, :title => "Project#{n}")
end

答案 2 :(得分:1)

这提供了你所要求的错觉......

eigenclass = class << self; self; end
3.times do |n|
  eigenclass.class_eval { attr_accessor "project#{n}" }
  eval "self.project#{n} = FactoryGirl.create(:project, :title => \"Project #{n}\")"
end

但请不要这样做。它实际上是在Kernel上创建了一个属性访问者,每个值为n一个。

Here是我的参考。