迭代数组以在ruby中创建变量

时间:2015-01-16 22:05:07

标签: ruby arrays loops variables variable-assignment

是否可以通过迭代数组来创建多个变量?

例如,假设我有一个名为numbers = [1,2,3,4,5]的数组,我想创建一系列名为number_1number_2,...,number_5的变量到数字数组中它们各自的索引(例如number_1 = 1number_2 = 2等)。

我尝试了以下几点:

numbers.each_with_index do |num, index|
  number_"#{index+1}" = num
end

但那失败了。

基本上,我希望迭代过程能够自动创建值并为变量赋值。

谢谢。

1 个答案:

答案 0 :(得分:2)

一种方法是:

instance_variable_set("@number_#{index+1}", num)

另一种方法是使用eval方法创建实例变量:

eval "@number_#{index+1} = #{num}"

首先认为eval被认为有点hacky,并且不会对JRuby起作用。

(警告:上面的代码创建了实例变量,而不是作用域级变量(也就是局部变量)。例如:代码创建@number_1而非number_1。据我所知Ruby没有提供动态创建持久存在的范围级变量的简单方法;您可以在eval内创建一个但超出eval范围的范围。)