我有一个字符串数组:
names = ['log_index', 'new_index']
我想要做的是从名称创建变量:
names.each { |name| name = [] } # obviously it does not do what I want
这些变量未在代码中的任何位置声明。
我怎么能这样做?
答案 0 :(得分:4)
无法在Ruby中动态定义新局部变量。
有可能在Ruby 1.8中使用eval 'x = 2'
。
您可以使用eval
或binding.local_variable_set
更改现有变量。
我会考虑使用hash
来存储值。
答案 1 :(得分:1)
您无法在ruby中动态定义局部变量,但您可以动态定义实例变量:
names = ['log_index', 'new_index']
names.each { |name| instance_variable_set("@#{name}", []) }
这会给你:
@log_index
=> []
@new_index
=> []
您还可以使用instance_variable_get
动态访问实例变量:
names = ['log_index', 'new_index']
names.each { |name| puts instance_variable_get("@#{name}").inspect }
答案 2 :(得分:0)
你可以使用这个黑客:
names.each { |name| eval "def #{name}; []; end" }