是否可以通过迭代数组来创建多个变量?
例如,假设我有一个名为numbers = [1,2,3,4,5]
的数组,我想创建一系列名为number_1
,number_2
,...,number_5
的变量到数字数组中它们各自的索引(例如number_1 = 1
,number_2 = 2
等)。
我尝试了以下几点:
numbers.each_with_index do |num, index|
number_"#{index+1}" = num
end
但那失败了。
基本上,我希望迭代过程能够自动创建值并为变量赋值。
谢谢。
答案 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
范围的范围。)