如何在ruby中循环分配不同的变量?

时间:2014-04-28 04:31:19

标签: ruby

我有这样的清单:

list = ["test1","test2","test3"]

我想用值分配三个关联变量。像:

test1_var = "test1"
test2_var = "test2"
test3_var = "test3"

我跑了这样一个循环并收到错误:

list.each { |x| eval(x+"_var") = x}

这样做的正确方法是什么?

2 个答案:

答案 0 :(得分:3)

该块具有不同的范围。因此,如果您在块中创建局部变量,它将不会持续执行list.each块。还有其他限制。

根据这篇博文,这几乎是不可能的:http://blog.myrecipecart.com/2010/06/ruby-19-dynamic-creation-of-local.html

答案 1 :(得分:3)

据我所知,只能动态设置实例变量而不是局部变量。所以如果这是在某种类中,那么这将是有效的。如果您绝对不希望它们作为实例变量,那么只需将每个变量分配给本地版本。

list = ["test1","test2","test3"] 

list.each { |t| instance_variable_set("@#{t}_var".to_sym, t) }

以下是instance_variable_set的文档:

http://www.ruby-doc.org/core-1.9.3/Object.html#method-i-instance_variable_set