通过符号替换变量值?



var是一个存储了一些值的变量。如何在中替换var的值:var(符号)到nil?

任何想法?

如果它是一个或多个局部变量,使用包含您想要进行赋值的字符串在隐式本地绑定上调用Kernel#eval。注意,插值隐式地将Symbol转换为String,所以你不需要在你迭代的Symbol对象上显式地调用#to_s。例如:

local_vars = [:foo, :bar]
local_vars.map { eval "#{_1} = nil" }

如果它是一个实例或类变量,那么您可以访问不需要显式调用#eval的Object和class方法。相反,你可以在你想要修改的实例或类对象上调用object# instance_variable_set或Module#class_variable_set,而不是在绑定上。例如:

obj = Object.new
instance_vars = [:@foo, :@bar]
instance_vars.map { obj.instance_variable_set _1, nil }

最新更新