要約
Ruby のソースコードとその実行結果を、行ごとに交互に表示するためのライブラリです。irb を実行しなくても、使用することが出来ます。
実行結果を得るためには、Kernel#xmp と、XMP#puts を使った方法があります。どちらの場合も XMP がコンテキスト情報を保持するため、実行結果に差分はありません。(Binding を指定できるタイミングは違います)
関数(Kernel#xmp)を使って実行結果を得る
Kernel#xmp では、以下のように Ruby のソースコードを文字列として渡す事で実行結果を標準出力に表示します。
$ cat t.rb
require "irb/xmp"
xmp <<END
foo = 1
foo
END
$ ruby t.rb
foo = 1
==>1
foo
==>1
XMP インスタンス(XMP#puts)を使って実行結果を得る
XMP#puts では、以下のように Ruby のソースコードを文字列として渡す事で実行結果を標準出力に表示します。
$ cat t.rb
require "irb/xmp"
xmp = XMP.new
xmp.puts <<END
foo = 1
foo
END
xmp.puts <<END
foo
END
$ ruby t.rb
foo = 1
==>1
foo
==>1
foo
==>1
XMP がコンテキスト情報を管理しているため、変数 foo を 2 度目の呼び出しでも保持しています。Kernel#xmp でも同様の操作を行えます。
コンテキスト
XMP メソッド群のコンテキストは、呼び出す前のコンテキストで評価されます。明示的にコンテキストを指定するとそのコンテキストで評価します。
例xmp "foo", an_binding
[注意] マルチスレッドには対応していません。
注意
irb/xmp は内部で irb を使用する事で実行結果を表示しています (IRB::Context#prompt_mode で選択できる :XMP モードはそのために用意されています)。そのため、irb プロンプト中で使用可能なコマンドを実行した時に実行結果を得る事ができる点に注意してください。(例. nil が返る事を期待して conf を実行する)
クラス
| XMP | Ruby のソースコードとその実行結果を、行ごとに交互に表示するためのクラスです。 |
同時にrequireされるライブラリ
| io/console | 端末上の入出力を制御するための機能を IO に追加するためのライブラリです。 |
| irb | irb は Interactive Ruby の略です。 irb を使うと、Ruby の式を標準入力から簡単に入力・実行できます。 |
| irb/cmd/chws | irb 中の irb_current_working_workspace、irb_change_workspace コマンドのための拡張を定義したサブライブラリです。 |
| irb/cmd/help | irb 中の help コマンドのための拡張を定義したサブライブラリです。 |
| irb/cmd/load | irb 中の irb_load、irb_require、irb_source コマンドのための拡張を定義したサブライブラリです。 |
| irb/cmd/nop | irb 中でコマンドを拡張する各ライブラリのベースになるクラスを扱うサブライブラリです。 |
| irb/cmd/pushws | irb 中の irb_workspaces、irb_push_workspace、irb_pop_workspace コマンドのための拡張を定義したサブライブラリです。 |
| irb/cmd/subirb | irb 中の irb、irb_jobs、irb_fg、irb_kill コマンドのための拡張を定義したサブライブラリです。 |
| irb/color | irb の出力の色付け(シンタックスハイライト)を行うためのサブライブラリです。 |
| irb/completion | irb の completion 機能を提供するライブラリです。 |
| irb/context | irb の設定を扱うためのサブライブラリです。 |
| irb/easter-egg | irb のイースターエッグ(Ruby のロゴのアスキーアート表示・アニメーション)を実装するサブライブラリです。 |
| irb/ext/change-ws | IRB::Context に irb 中での self を管理する機能を提供するサブライブラリです。 |
| irb/ext/history | IRB::Context に実行結果の履歴を保持する機能を提供するサブライブラリです。 |
| irb/ext/loader | load または require 時の irb のファイル読み込み機能(irb_load、 irb_require)を定義するサブライブラリです。 |
| irb/ext/multi-irb | irb 中で複数の独立した irb を扱えるようにするためのサブライブラリです。 |
| irb/ext/save-history | IRB::Context にヒストリの読み込み、保存の機能を提供するサブライブラリです。 |
| irb/ext/tracer | irb への入力を評価する時に tracer gem を使用してトレース出力を行う機能を提供するサブライブラリです。tracer は Ruby 3.1 で標準添付ライブラリから削除されたため、使用するには tracer gem のインストールが必要です。 |
| irb/ext/use-loader | load または require 時に irb のファイル読み込み機能(irb_load、 irb_require)を使うように設定する機能を提供するサブライブラリです。 |
| irb/ext/workspaces | IRB::Context に irb 中での self を管理する機能を提供するサブライブラリです。 |
| irb/extend-command | irb を拡張するためのサブライブラリです。 |
| irb/frame | 現在実行中のフレーム情報を取り扱うためのサブライブラリです。 |
| irb/init | irb の初期化をするためのライブラリです。 |
| irb/input-method | irb が入力を扱うためのサブライブラリです。 |
| irb/locale | ライブラリ内部で使用します。 |
| irb/magic-file | irb が扱う入力やファイル中のマジックコメントを正しく扱うためのサブライブラリです。 |
| irb/ruby-lex | Ruby のソースコードを字句解析するためのサブライブラリです。 |
| irb/src_encoding | irb が扱う入力やファイル中の既定のエンコーディングを正しく扱うためのサブライブラリです。 |
| irb/version | irb ライブラリのバージョンを定義したサブライブラリです。 |
| irb/workspace | irb 中で self を扱うためのサブライブラリです。 |
| irb/ws-for-case-2 | ライブラリ内部で使用します。 |
| reline | GNU Readline 互換の行編集機能を純 Ruby で実装したライブラリです。 |
| ripper | Ruby プログラムを解析するためのライブラリです。 |
| ripper/filter | イベントドリブンスタイルで Ruby プログラムを加工するためのライブラリです。 |
| ripper/lexer | Ruby プログラムをトークンのリストとして処理するためのライブラリです。 |
| ripper/sexp | Ruby プログラムを S 式として扱うためのライブラリです。 |