現在のコンテキストで以前に未定義の変数を動的に定義できる方法があるかどうか疑問に思っています。例えば:
foo # => NameError: undefined method or local variable ...
# Some method call which sets foo = 1 in the local context
foo # => 1
別の言い方をすれば、それが未定義であることを考えると、変数を使用せずfoo
にローカル変数を定義できるコードを探しています (たとえば、値が である他の変数があり、値を設定するためにそれに依存しなければならなかった場合)の)。foo
foo
bar
:foo
foo
Ruby 2.1 では、eval('foo = 1')
orまたははすべて次と同等のようです。eval('foo = 1', binding)
binding.local_variable_set(:foo, 1)
1.times do
foo = 1
end
つまり、新しいローカル コンテキストfoo
のコンテキストで設定し、そのコンテキストの外では値にアクセスできないようにします。
私がやろうとしていることは可能ですか?
更新: この質問は、特定のローカル変数コンテキスト (モジュール/クラス、メソッド、proc、ブロックなど) に固有のものではありません。それができる、またはできない状況を明確に知りたいと思います。