在 Ruby 中动态设置局部变量 [重复]

2024-03-23

我对在 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(使用前将#替换为@)

在 Ruby 中动态设置局部变量 [重复] 的相关文章

随机推荐