从生成的元素创建一个新变量

时间:2016-01-15 19:47:01

标签: ruby variables generated

我想从数组元素创建一个新变量。这是一个非常糟糕的代码,不起作用:

(1..5).each {|x| print "step " + x.to_s + ": "; name_of_variable_+_x  = gets.chomp}

但我想了解我想要做的事情。

2 个答案:

答案 0 :(得分:2)

这是您使用带Array的变量的情况。

vars = []
(1..5).each do |x|
  vars[x] = gets.chomp
  puts "step #{x}: #{vars[x]}"
end

如果确实想要定义变量,则必须使用eval。这是一个糟糕的主意,因为你将使用一个非常危险的特性(eval)来实现一个非常愚蠢的想法(定义基于数字的变量)。

答案 1 :(得分:1)

  • 您可以在binding上动态定义局部变量:

    b = binding
    b.local_variable_set("name_of_variable_#{x}", gets.chomp)
    

    但是当你想获得价值时,你必须继续携带b,并且不方便。

  • 稍微好一点的方法是使用一个实例变量,它不需要你使用绑定:

    instance_variable_set("@name_of_variable_#{x}", gets.chomp)
    
  • 但是当你有一系列的值时,特别是当它们被编号时,没有理由将它们各自保存在一个单独的变量中。你应该只有一个数组来保存所有信息:

    variables = Array.new(5){|x| print "step #{x + 1}: "; gets.chomp}