eval(expr) -> object
[permalink][rdoc]eval(expr, bind, fname = "(eval)", lineno = 1) -> object
文字列 expr を Ruby プログラムとして評価してその結果を返します。第2引数に Binding オブジェクトを与えた場合、そのオブジェクトを生成したコンテキストで文字列を評価します。
expr の中のローカル変数の扱いはブロックの場合と同じです。すなわち、eval 実行前に補足されていた変数は eval 実行後にブロック外に持ち出せます。
fname と lineno が与えられた場合には、ファイル fname の行番号 lineno から文字列 expr が書かれているかのようにコンパイルされます。スタックトレースの表示などを差し替えることができます。
bind によらずに特定のオブジェクトのコンテキストで expr を評価したい場合、 Module#module_eval, BasicObject#instance_eval が使えます。
a = nil eval('a = RUBY_RELEASE_DATE') p a #=> "2007-03-13" eval('def fuga;p 777 end') fuga #=> 777 eval('raise RuntimeError', binding, 'XXX.rb', 4) #=> XXX.rb:4: RuntimeError (RuntimeError) # from ..:9
[SEE_ALSO] Kernel.#binding,Module#module_eval,BasicObject#instance_eval,Object#method,Object#send