遍历数组以在 ruby 中创建变量
Iterating over an array to create variables in ruby
是否可以通过遍历数组来创建多个变量?
例如,假设我有一个名为 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
但是那失败了。
本质上,我希望迭代过程能够自动为变量创建和赋值。
谢谢。
一种方法是:
instance_variable_set("@number_#{index+1}", num)
另一种方法是使用eval
方法创建一个实例变量:
eval "@number_#{index+1} = #{num}"
请注意 eval
被认为有点 hacky,不适用于 JRuby。
(注意:上面的代码创建实例变量,而不是范围级变量(a.k.a。局部变量)。示例:代码创建 @number_1
而不是 number_1
。到目前为止据我所知,Ruby 没有提供一种直接的方法来动态创建持续存在的范围级变量;您可以在 eval
中创建一个,但它超出了 [=12= 的范围].)
是否可以通过遍历数组来创建多个变量?
例如,假设我有一个名为 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
但是那失败了。
本质上,我希望迭代过程能够自动为变量创建和赋值。
谢谢。
一种方法是:
instance_variable_set("@number_#{index+1}", num)
另一种方法是使用eval
方法创建一个实例变量:
eval "@number_#{index+1} = #{num}"
请注意 eval
被认为有点 hacky,不适用于 JRuby。
(注意:上面的代码创建实例变量,而不是范围级变量(a.k.a。局部变量)。示例:代码创建 @number_1
而不是 number_1
。到目前为止据我所知,Ruby 没有提供一种直接的方法来动态创建持续存在的范围级变量;您可以在 eval
中创建一个,但它超出了 [=12= 的范围].)