使用字符串插值动态创建Ruby变量

时间:2015-06-01 19:21:38

标签: ruby variables interpolation

我想做类似的事情:

4.times do |n|
  "member#{n}" = Fabricate(:user)
end

调用member1member2等..会给我用户实例。 #send或#eval对我的情况有用吗?谢谢你的期待。

1 个答案:

答案 0 :(得分:2)

您无法以这种方式动态设置local variables,因为您实际要做的是设置String。您的代码解释如下

"member1" = Fabricate(:user)

这会为意外SyntaxError引发=,因为您无法将String设置为任何内容。

然而,您可以使用instance_variables执行此操作,如下所示:

4.times do |n|
  instance_variable_set("@member#{n}", Fabricate(:user))
end

然后使用@member1@member2

访问它们

要回答您的第二个问题,请send并且eval在这种情况下没有特别用处