Ruby 1.9.2 リファレンスマニュアル > ライブラリ一覧 > library _builtin > module Kernel > eval

module function Kernel.#eval

eval(expr) -> object
eval(expr, bind, fname = __FILE__, lineno = 1) -> object

文字列 expr を Ruby プログラムとして評価してその結果を返しま す。第2引数に Proc オブジェクトまたは Binding オブジェ クトを与えた場合、そのオブジェクトを生成したコンテキストで文字列を 評価します。

expr の中のローカル変数の扱いはブロックの場合と同じです。すなわち、eval 実行前に補足されていた変数は eval 実行後にブロック外に持ち出せます。

fname と lineno が与えられた場合には、ファイル fname の行番号 lineno から文字列 expr が書かれているかのように コンパイルされます。スタックトレースの表示などを差し替えることが できます。

bind によらずに特定のオブジェクトのコンテキストで expr を評価したい 場合、 Module#module_eval, Object#instance_eval が使えます。

[PARAM] expr:
評価する文字列です。
[PARAM] bind:
Proc オブジェクトまたは Binding オブジェクトです。
[PARAM] fname:
スタックトレースに表示するファイル名です。
[PARAM] lineno:
文字列 expr が書かれていると想定する先頭の行番号を整数で指定します。
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, Object#instance_eval, Object#method, Object#send