eval(expr) -> object[permalink][rdoc][edit]eval(expr, bind, fname = "(eval)", lineno = 1) -> object(string src, ?Binding? scope, ?string filename, ?int lineno) → untyped-
文字列 expr を Ruby プログラムとして評価してその結果を返します。第2引数に Binding オブジェクトを与えた場合、そのオブジェクトを生成したコンテキストで文字列を評価します。
expr の中のローカル変数の扱いはブロックの場合と同じです。すなわち、eval 実行前に定義されていた変数を eval の中で参照・変更でき、その変更は eval 実行後にも引き継がれます。
fname と lineno が与えられた場合には、ファイル fname の行番号 lineno から文字列 expr が書かれているかのようにコンパイルされます。スタックトレースの表示などを差し替えることができます。
expr は、文字列 expr 自身のエンコーディングをスクリプトエンコーディング(多言語化/スクリプトエンコーディング)として評価されます。ただし expr の先頭にマジックコメント(多言語化/magic comment)がある場合は、そこで指定されたエンコーディングが優先されます。
# ソースファイルが UTF-8 の場合 p eval("__ENCODING__") # => #<Encoding:UTF-8> p eval("__ENCODING__".encode("EUC-JP")) # => #<Encoding:EUC-JP> p eval("# encoding: us-ascii\n__ENCODING__") # => #<Encoding:US-ASCII>bind によらずに特定のオブジェクトのコンテキストで expr を評価したい場合、 Module#module_eval, BasicObject#instance_eval が使えます。
- [PARAM]
expr: - 評価する文字列です。
- [PARAM]
bind: - 評価コンテキストです。
- [PARAM]
fname: - スタックトレースに表示するファイル名です。
- [PARAM]
lineno: - 文字列 expr が書かれていると想定する先頭の行番号を整数で指定します。
a = nil eval('a = RUBY_RELEASE_DATE') p a # => "2007-03-13" eval('def fuga;p 777 end') p 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
- [PARAM]