Webエンジニア向けプログラミング解説動画をYouTubeで配信中!
▶ チャンネル登録はこちら

【Ruby3.x】RubyVM::InstructionSequence::eval()メソッドの使い方

evalメソッドの使い方について、初心者にもわかりやすく解説します。

作成日: 更新日:

基本的な使い方

evalメソッドは、RubyVM::InstructionSequenceオブジェクトが表す、Rubyの内部的な形式にコンパイルされたコードを実行するメソッドです。このメソッドは、あらかじめコンパイルされたRubyコードを評価し、その結果を返します。

コードを実行する際の環境(コンテキスト)は、引数によって細かく制御できます。binding引数にBindingオブジェクトを渡すことで、コードが参照できる変数やメソッドの有効範囲(スコープ)を指定できます。これは、特定の環境下でコードを実行したい場合に非常に有用です。また、file引数には、実行されるコードの仮想的なファイル名を文字列で指定し、エラー発生時のスタックトレースなどで出所を識別するのに役立てることができます。同様に、line引数で開始行番号を指定することも可能です。さらに詳細な動作設定が必要な場合は、options引数を使用します。

このメソッドの戻り値は、実行されたRubyコードにおける最後の式の評価結果です。RubyVM::InstructionSequenceはRubyのコードを効率的に処理するための内部的な表現であり、このevalメソッドは、通常、アプリケーション開発で直接利用されることは稀です。しかし、Rubyの高度なメタプログラミングや動的なコード生成、あるいはRuby処理系の内部挙動を深く探求する際に、コンパイル済みのコードを柔軟に実行する強力な手段として活用されます。

構文(syntax)

1RubyVM::InstructionSequence.eval(instruction_sequence_object)

引数(parameters)

binding = nil, file = nil, line = nil, scope: nil, keep_script_lines: nil

  • binding = nil: コードの評価に使用するバインディングを指定します。nil の場合は現在のバインディングが使用されます。
  • file = nil: コードのファイル名として表示される文字列を指定します。
  • line = nil: コードの行番号として表示される整数を指定します。
  • scope: nil: コードの評価に使用するスコープを指定します。
  • keep_script_lines: nil: コードのソース行を保持するかどうかを示す真偽値を指定します。

戻り値(return)

Object

RubyVM::InstructionSequence#evalは、レシーバであるRubyVM::InstructionSequenceオブジェクトが保持するバイトコードを評価した結果を返します。

関連コンテンツ