【发布时间】:2013-10-19 17:51:08
【问题描述】:
我想知道是否有一种方法可以让我在当前上下文中动态定义以前未定义的变量。例如:
foo # => NameError: undefined method or local variable ...
# Some method call which sets foo = 1 in the local context
foo # => 1
换一种说法,鉴于foo 未定义,我正在寻找任何可以让我在不使用foo 变量的情况下定义局部变量foo 的代码(例如,如果我有一些其他变量@987654325 @ 其值为:foo,我不得不依靠它来设置foo 的值。
似乎eval('foo = 1') 或eval('foo = 1', binding) 或在Ruby 2.1 中binding.local_variable_set(:foo, 1) 都等价于:
1.times do
foo = 1
end
换句话说,他们将foo 设置在一个新本地上下文的上下文中,这样在该上下文之外就无法访问该值。
我想做的事可能吗?
更新:这个问题并不特定于任何特定的局部变量上下文(模块/类、方法、proc、块等)。我有兴趣明确了解可以或不能完成的任何上下文。
【问题讨论】:
-
您要解决的问题是什么?无论您尝试做什么,在 ruby 中都可能实现,但我认为这不是一件好事。
-
不一样,但也许
define_method(:foo) { 1 }是一个选项? -
我知道它涉及变量范围,但我不明白你的问题。
-
@phoet 我在询问与任何需求无关的 Ruby 语言。这个问题是在另一个 SO 问题的背景下出现的。
-
@spickermann 我同意这将是相似的,但不一样。 :-)
标签: ruby local-variables