Ruby の eval メソッドでローカル変数定義はできない
次のように #eval
メソッドでローカル変数を定義した場合、外からは参照することができない。
eval "a = 42" p a + a # => error: undefined local variable or method `a' for main:Object (NameError)
これは expr 内のローカル変数の扱いがブロックと同じ為、外から参照する事ができないからです。
逆にいえば、すでに宣言されているローカル変数に対しての代入や expr 内での参照は行うことができます。
x = 0 # すでに宣言されているローカル変数に代入することはできる eval "a = 42; x = a + a" x # => 84