【问题标题】:Iterating over an array to create variables in ruby遍历数组以在 ruby​​ 中创建变量
【发布时间】:2015-03-15 14:57:32
【问题描述】:

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

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

我尝试了以下方法:

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

但这失败了。

本质上,我希望迭代过程能够自动创建变量并将值分配给变量。

谢谢。

【问题讨论】:

  • 为什么要这样做? number_1 给你什么numbers[0] 没有?
  • 这可能会满足您的需求:stackoverflow.com/q/16419767/2177
  • 谢谢@yalestar,这很有帮助。
  • 这个的用例是什么?

标签: ruby arrays loops variables variable-assignment


【解决方案1】:

一种方法是:

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

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

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

请注意 eval 被认为有点 hacky,并且不适用于 JRuby。

(警告:上面的代码创建实例变量,而不是范围级别的变量(又名局部变量)。示例:代码创建 @number_1 而不是 number_1。据我所知,Ruby 并没有提供直接的动态创建持续存在的范围级变量的方法;您可以在eval 内创建一个,但它超出了eval 的范围。)

【讨论】:

  • 请注意,这不会创建局部变量(似乎已被请求)。没有办法以这种方式创建局部变量。
猜你喜欢
  • 2016-05-30
  • 2018-09-07
  • 1970-01-01
  • 2021-05-20
  • 1970-01-01
  • 2018-06-17
  • 1970-01-01
  • 2016-01-12
  • 2020-05-03
相关资源
最近更新 更多