我对在 Ruby 中动态设置局部变量感兴趣。不创建方法、常量或实例变量。
所以像这样:
args[:a] = 1
args.each_pair do |k,v|
Object.make_instance_var k,v
end
puts a
> 1
我特别想要局部变量,因为所讨论的方法存在于模型中,并且我不想污染全局或对象空间。
作为未来读者的附加信息,从 ruby 2.1.0 开始,您可以使用binding.local_variable_get
and binding.local_variable_set
:
def foo
a = 1
b = binding
b.local_variable_set(:a, 2) # set existing local variable `a'
b.local_variable_set(:c, 3) # create new local variable `c'
# `c' exists only in binding.
b.local_variable_get(:a) #=> 2
b.local_variable_get(:c) #=> 3
p a #=> 2
p c #=> NameError
end
如中所述the doc http://ruby-doc.org//core-2.1.0/Binding.html#method-i-local_variable_set,它的行为类似于
binding.eval("#{symbol} = #{obj}")
binding.eval("#{symbol}")
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)