irb 1.0.0 → 1.4.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (57) hide show
  1. checksums.yaml +4 -4
  2. data/.document +4 -0
  3. data/Gemfile +10 -2
  4. data/LICENSE.txt +3 -3
  5. data/README.md +3 -3
  6. data/Rakefile +17 -1
  7. data/doc/irb/irb-tools.rd.ja +184 -0
  8. data/doc/irb/irb.rd.ja +427 -0
  9. data/irb.gemspec +18 -4
  10. data/lib/irb/cmd/fork.rb +2 -4
  11. data/lib/irb/cmd/help.rb +10 -5
  12. data/lib/irb/cmd/info.rb +32 -0
  13. data/lib/irb/cmd/ls.rb +101 -0
  14. data/lib/irb/cmd/measure.rb +43 -0
  15. data/lib/irb/cmd/nop.rb +10 -4
  16. data/lib/irb/cmd/pushws.rb +0 -1
  17. data/lib/irb/cmd/show_source.rb +93 -0
  18. data/lib/irb/cmd/whereami.rb +20 -0
  19. data/lib/irb/color.rb +246 -0
  20. data/lib/irb/color_printer.rb +47 -0
  21. data/lib/irb/completion.rb +254 -55
  22. data/lib/irb/context.rb +165 -72
  23. data/lib/irb/easter-egg.rb +138 -0
  24. data/lib/irb/ext/change-ws.rb +0 -1
  25. data/lib/irb/ext/history.rb +47 -11
  26. data/lib/irb/ext/loader.rb +46 -20
  27. data/lib/irb/ext/multi-irb.rb +7 -7
  28. data/lib/irb/ext/save-history.rb +36 -11
  29. data/lib/irb/ext/tracer.rb +14 -2
  30. data/lib/irb/ext/use-loader.rb +4 -3
  31. data/lib/irb/ext/workspaces.rb +0 -1
  32. data/lib/irb/extend-command.rb +113 -63
  33. data/lib/irb/frame.rb +12 -7
  34. data/lib/irb/help.rb +0 -1
  35. data/lib/irb/init.rb +146 -26
  36. data/lib/irb/input-method.rb +287 -9
  37. data/lib/irb/inspector.rb +15 -11
  38. data/lib/irb/lc/error.rb +55 -16
  39. data/lib/irb/lc/help-message +25 -13
  40. data/lib/irb/lc/ja/error.rb +55 -14
  41. data/lib/irb/lc/ja/help-message +11 -6
  42. data/lib/irb/locale.rb +13 -4
  43. data/lib/irb/notifier.rb +12 -8
  44. data/lib/irb/output-method.rb +6 -6
  45. data/lib/irb/ruby-lex.rb +673 -992
  46. data/lib/irb/ruby_logo.aa +37 -0
  47. data/lib/irb/version.rb +2 -2
  48. data/lib/irb/workspace.rb +65 -21
  49. data/lib/irb/xmp.rb +1 -1
  50. data/lib/irb.rb +276 -96
  51. data/man/irb.1 +229 -0
  52. metadata +25 -31
  53. data/.gitignore +0 -9
  54. data/.travis.yml +0 -6
  55. data/lib/irb/lc/.document +0 -4
  56. data/lib/irb/ruby-token.rb +0 -267
  57. data/lib/irb/slex.rb +0 -282
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 423daf218fc081796e0be9093dea7df2340782475a57d97cc279f55482d5ba09
4
- data.tar.gz: c2990b036ee5b6f1cab514e11be623d67eed699729e361bea46b2722bd0eea8b
3
+ metadata.gz: be0bdb184f8483785b83b91bc57339e994a15b2d1435720e8f17b9f04b2b924e
4
+ data.tar.gz: 02ca5b9f06cedc077c79f07ad33765225736f9d7ffa9bb93671cf739131a2d9c
5
5
  SHA512:
6
- metadata.gz: 190785277de97de1faef3c9aa599ad15c456c20da76eed4559a8e32f4c49aaf957884b083677ce5fc31c9974353f3f3dbc4a4a3aef29f36a703b16929656600d
7
- data.tar.gz: b79eb0f94a33aa34afc6ebf7124e9e72ae4cad283063d369ab7ca7e3b86adb88248d1fc3e0dd3df7f6584c6222e93baf09a0d776a686772ab99508b5d5706b05
6
+ metadata.gz: faa52653f45b98a0ce82b215110376e3cac3faefa34928a50067e101c3171a0fbc492ba3b7a23334ac81f23448526e6931fca45925a07ab914aa2634c8e1de9a
7
+ data.tar.gz: 4da73a1293f021bcb3a0ed996ac4f48f3c73884d34efa438987b230cda72ce3aa0c6ac67865e57655cdcc8ffd49cb6ca267c564711345247ed889857f60156c1
data/.document ADDED
@@ -0,0 +1,4 @@
1
+ LICENSE.txt
2
+ README.md
3
+ doc
4
+ lib/**/*.rb
data/Gemfile CHANGED
@@ -1,5 +1,13 @@
1
1
  source "https://rubygems.org"
2
2
 
3
- git_source(:github) {|repo_name| "https://github.com/#{repo_name}" }
4
-
5
3
  gemspec
4
+
5
+ group :development do
6
+ is_unix = RUBY_PLATFORM =~ /(aix|darwin|linux|(net|free|open)bsd|cygwin|solaris|irix|hpux)/i
7
+ is_truffleruby = RUBY_DESCRIPTION =~ /truffleruby/
8
+ gem "vterm", ">= 0.0.5" if is_unix && ENV['WITH_VTERM']
9
+ gem "yamatanooroti", ">= 0.0.6"
10
+ gem "rake"
11
+ gem "stackprof" if is_unix && !is_truffleruby
12
+ gem "test-unit"
13
+ end
data/LICENSE.txt CHANGED
@@ -4,10 +4,10 @@ Redistribution and use in source and binary forms, with or without
4
4
  modification, are permitted provided that the following conditions
5
5
  are met:
6
6
  1. Redistributions of source code must retain the above copyright
7
- notice, this list of conditions and the following disclaimer.
7
+ notice, this list of conditions and the following disclaimer.
8
8
  2. Redistributions in binary form must reproduce the above copyright
9
- notice, this list of conditions and the following disclaimer in the
10
- documentation and/or other materials provided with the distribution.
9
+ notice, this list of conditions and the following disclaimer in the
10
+ documentation and/or other materials provided with the distribution.
11
11
 
12
12
  THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
13
13
  ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
data/README.md CHANGED
@@ -31,9 +31,9 @@ $ irb
31
31
  irb(main):001:0> 1+2
32
32
  #=> 3
33
33
  irb(main):002:0> class Foo
34
- irb(main):003:1> def foo
35
- irb(main):004:2> print 1
36
- irb(main):005:2> end
34
+ irb(main):003:1> def foo
35
+ irb(main):004:2> print 1
36
+ irb(main):005:2> end
37
37
  irb(main):006:1> end
38
38
  #=> nil
39
39
  ```
data/Rakefile CHANGED
@@ -4,7 +4,23 @@ require "rake/testtask"
4
4
  Rake::TestTask.new(:test) do |t|
5
5
  t.libs << "test" << "test/lib"
6
6
  t.libs << "lib"
7
- t.test_files = FileList["test/**/test_*.rb"]
7
+ t.ruby_opts << "-rhelper"
8
+ t.test_files = FileList["test/irb/test_*.rb"]
9
+ end
10
+
11
+ Rake::TestTask.new(:test_yamatanooroti) do |t|
12
+ t.libs << 'test' << "test/lib"
13
+ t.libs << 'lib'
14
+ #t.loader = :direct
15
+ t.ruby_opts << "-rhelper"
16
+ t.pattern = 'test/irb/yamatanooroti/test_*.rb'
17
+ end
18
+
19
+ task :sync_tool do
20
+ require 'fileutils'
21
+ FileUtils.cp "../ruby/tool/lib/core_assertions.rb", "./test/lib"
22
+ FileUtils.cp "../ruby/tool/lib/envutil.rb", "./test/lib"
23
+ FileUtils.cp "../ruby/tool/lib/find_executable.rb", "./test/lib"
8
24
  end
9
25
 
10
26
  task :default => :test
@@ -0,0 +1,184 @@
1
+ irb関連おまけコマンドとライブラリ
2
+ $Release Version: 0.7.1 $
3
+ $Revision$
4
+ by Keiju ISHITSUKA(Nihon Rational Co.,Ltd.)
5
+
6
+ =begin
7
+
8
+ :コマンド:
9
+ * rtags -- ruby tags command
10
+
11
+ :関数ライブラリ:
12
+ * xmp -- irb version of gotoken xmp-function
13
+
14
+ :クラスライブラリ:
15
+ * frame.rb -- frame tracer
16
+ * completion.rb -- irb completor
17
+
18
+ = rtags
19
+
20
+ rtagsはemacs及びvi用の, TAGファイルをつくるコマンドです.
21
+
22
+ == 使い方
23
+
24
+ rtags [-vi] file....
25
+
26
+ カレントディレクトリにemacs用のTAGSファイルができます. -viオプションを
27
+ つけた時にはvi用のtagsファイルを作成します.
28
+
29
+ emacsの場合, 通常のetags.elがそのまま使えます. 検索可能なのは,
30
+
31
+ * クラス
32
+ * メソッド
33
+ * 特異メソッド
34
+ * alias
35
+ * attrで宣言されたアクセサ(パラメータがシンボルか文字列リテラルに限る)
36
+ * attr_XXXで宣言されたアクセサ(パラメータがシンボルか文字列リテラルに限る)
37
+
38
+ です.
39
+
40
+ Cなどで使っているのと違うのは, コンプリーションに関する部分で,
41
+
42
+ 関数名は,
43
+
44
+ 関数名(
45
+
46
+ クラスは,
47
+
48
+ ::クラス名::....::クラス名
49
+
50
+ メソッドは,
51
+
52
+ ::クラス名::....::クラス名#メソッド名
53
+
54
+ 特異メソッド(クラスメソッド)は
55
+
56
+ ::クラス名::....::クラス名.メソッド名
57
+
58
+ でコンプリーションを行なうところです.
59
+
60
+ = xmp.rb
61
+
62
+ ごとけんxmpの上位互換バージョンです. ただ, 非常に重いのでごとけんxmpで
63
+ は対応できない時に, 使用すると良いでしょう.
64
+
65
+ == 使い方
66
+
67
+ === 関数として使う.
68
+
69
+ require "irb/xmp"
70
+ xmp <<END
71
+ foo = 1
72
+ foo
73
+ END
74
+ ---
75
+ foo = 1
76
+ ==>1
77
+ foo
78
+ ==>1
79
+
80
+ === XMPインスタンスを用いる.
81
+
82
+ この場合は, XMPがコンテキスト情報を持つので, 変数の値などを保持してい
83
+ ます.
84
+
85
+ require "irb/xmp"
86
+ xmp = XMP.new
87
+ xmp.puts <<END
88
+ foo = 1
89
+ foo
90
+ END
91
+ xmp.puts <<END
92
+ foo
93
+ END
94
+ ===
95
+ foo = 1
96
+ ==>1
97
+ foo
98
+ ==>1
99
+ foo
100
+ ==>1
101
+
102
+ == コンテキストに関して
103
+
104
+ XMPメソッド群のコンテキストは, 呼び出す前のコンテキストで評価されます.
105
+ 明示的にコンテキストを指定するとそのコンテキストで評価します.
106
+
107
+ 例:
108
+
109
+ xmp "foo", an_binding
110
+
111
+ :注:
112
+ マルチスレッドには対応していません.
113
+
114
+ = frame.rb
115
+ 現在実行中のフレーム情報を取り扱うためのクラスです.
116
+
117
+ * IRB::Frame.top(n = 0)
118
+ 上からn番目のコンテキストを取り出します. nは0が最上位になります.
119
+ * IRB::Frame.bottom(n = 0)
120
+ 下からn番目のコンテキストを取り出します. nは0が最下位になります.
121
+ * IRB::Frame.sender
122
+ センダになっているオブジェクトを取り出します. センダとは, そのメソッ
123
+ ドを呼び出した側のselfのことです.
124
+
125
+ :注:
126
+ set_trace_funcを用いてRubyの実行をトレースしています. マルチスレッドに
127
+ は対応していません.
128
+
129
+ = completion.rb
130
+ irbのcompletion機能を提供するものです.
131
+
132
+ == 使い方
133
+
134
+ % irb -r irb/completion
135
+
136
+ とするか, ~/.irbrc 中に
137
+
138
+ require "irb/completion"
139
+
140
+ を入れてください. irb実行中に require "irb/completion" してもよいです.
141
+
142
+ irb実行中に (TAB) を押すとコンプレーションします.
143
+
144
+ トップレベルで(TAB)を押すとすべての構文要素, クラス, メソッドの候補がで
145
+ ます. 候補が唯一ならば完全に補完します.
146
+
147
+ irb(main):001:0> in
148
+ in inspect instance_eval
149
+ include install_alias_method instance_of?
150
+ initialize install_aliases instance_variables
151
+ irb(main):001:0> inspect
152
+ "main"
153
+ irb(main):002:0> foo = Object.new
154
+ #<Object:0x4027146c>
155
+
156
+ ((|変数名.|))の後に(TAB)を押すと, そのオブジェクトのメソッド一覧がでま
157
+ す.
158
+
159
+ irb(main):003:0> foo.
160
+ foo.== foo.frozen? foo.protected_methods
161
+ foo.=== foo.hash foo.public_methods
162
+ foo.=~ foo.id foo.respond_to?
163
+ foo.__id__ foo.inspect foo.send
164
+ foo.__send__ foo.instance_eval foo.singleton_methods
165
+ foo.class foo.instance_of? foo.taint
166
+ foo.clone foo.instance_variables foo.tainted?
167
+ foo.display foo.is_a? foo.to_a
168
+ foo.dup foo.kind_of? foo.to_s
169
+ foo.eql? foo.method foo.type
170
+ foo.equal? foo.methods foo.untaint
171
+ foo.extend foo.nil?
172
+ foo.freeze foo.private_methods
173
+
174
+ =end
175
+
176
+ % Begin Emacs Environment
177
+ % Local Variables:
178
+ % mode: text
179
+ % comment-column: 0
180
+ % comment-start: "%"
181
+ % comment-end: "\n"
182
+ % End:
183
+ %
184
+
data/doc/irb/irb.rd.ja ADDED
@@ -0,0 +1,427 @@
1
+ irb -- interactive ruby
2
+ $Release Version: 0.9.5 $
3
+ $Revision$
4
+ by Keiju ISHITSUKA(keiju@ruby-lang.org)
5
+ =begin
6
+ = irbとは?
7
+
8
+ irbはinteractive rubyの略です. rubyの式を標準入力から簡単に入力/実行する
9
+ ためのツールです.
10
+
11
+ = 起動
12
+
13
+ % irb
14
+
15
+ で行ないます.
16
+
17
+ = 使い方
18
+
19
+ irbの使い方は, Rubyさえ知っていればいたって簡単です. 基本的には irb と
20
+ いうコマンドを実行するだけです. irbを実行すると, 以下のようなプロンプ
21
+ トが表れてきます. 後は, rubyの式を入れて下さい. 式が完結した時点で実行
22
+ されます.
23
+
24
+ dim% irb
25
+ irb(main):001:0> 1+2
26
+ 3
27
+ irb(main):002:0> class Foo
28
+ irb(main):003:1> def foo
29
+ irb(main):004:2> print 1
30
+ irb(main):005:2> end
31
+ irb(main):006:1> end
32
+ nil
33
+ irb(main):007:0>
34
+
35
+ また, irbはReadlineモジュールにも対応しています. Readlineモジュールが
36
+ インストールされている時には, それを使うのが標準の動作になります.
37
+
38
+ = コマンドオプション
39
+
40
+ irb.rb [options] file_name opts
41
+ options:
42
+ -f ~/.irbrc を読み込まない.
43
+ -d $DEBUG をtrueにする(ruby -d と同じ)
44
+ -r load-module ruby -r と同じ.
45
+ -I path $LOAD_PATH に path を追加する.
46
+ -U ruby -U と同じ.
47
+ -E enc ruby -E と同じ.
48
+ -w ruby -w と同じ.
49
+ -W[level=2] ruby -W と同じ.
50
+ --context-mode n 新しいワークスペースを作成した時に関連する Binding
51
+ オブジェクトの作成方法を 0 から 3 のいずれかに設定する.
52
+ --echo 実行結果を表示する(デフォルト).
53
+ --noecho 実行結果を表示しない.
54
+ --echo-on-assignment
55
+ 代入時に実行結果を表示する.
56
+ --noecho-on-assignment
57
+ 代入時に実行結果を表示しない.
58
+ --truncate-echo-on-assignment
59
+ 代入時に省略された実行結果を表示する(デフォルト).
60
+ --inspect 結果出力にinspectを用いる.
61
+ --noinspect 結果出力にinspectを用いない.
62
+ --singleline シングルラインエディタを利用する.
63
+ --nosingleline シングルラインエディタを利用しない. デフォルトの動
64
+ 作は, inf-ruby-mode以外でシングルラインエディタを利
65
+ 用しようとする.
66
+ --colorize 色付けを利用する.
67
+ --nocolorize 色付けを利用しない.
68
+ --autocomplete オートコンプリートを利用する.
69
+ --noautocomplete オートコンプリートを利用しない.
70
+ --prompt prompt-mode
71
+ --prompt-mode prompt-mode
72
+ プロンプトモードを切替えます. 現在定義されているプ
73
+ ロンプトモードは, default, simple, xmp, inf-rubyが
74
+ 用意されています.
75
+ --inf-ruby-mode emacsのinf-ruby-mode用のプロンプト表示を行なう. 特
76
+ に指定がない限り, ラインエディタは使わなくなる.
77
+ --simple-prompt
78
+ 非常にシンプルなプロンプトを用いるモードです.
79
+ --noprompt プロンプト表示を行なわない.
80
+ --single-irb irb 中で self を実行して得られるオブジェクトをサ
81
+ ブ irb と共有する.
82
+ --tracer コマンド実行時にトレースを行なう.
83
+ --back-trace-limit n
84
+ バックトレース表示をバックトレースの頭から n, 後ろ
85
+ からnだけ行なう. デフォルトは16
86
+
87
+ --verbose 詳細なメッセージを出力する.
88
+ --noverbose 詳細なメッセージを出力しない(デフォルト).
89
+ -v, --version irbのバージョンを表示する.
90
+ -h, --help irb のヘルプを表示する.
91
+ -- 以降のコマンドライン引数をオプションとして扱わない.
92
+
93
+ = コンフィギュレーション
94
+
95
+ irb起動時に``~/.irbrc''を読み込みます. もし存在しない場合は,
96
+ ``.irbrc'', ``irb.rc'', ``_irbrc'', ``$irbrc''の順にloadを試みます.
97
+
98
+ オプションを設定する代わりに, 以下のコマンドでもデフォルトの動作を設定
99
+ できます.
100
+
101
+ IRB.conf[:IRB_NAME]="irb"
102
+ IRB.conf[:USE_TRACER]=false
103
+ IRB.conf[:USE_LOADER]=false
104
+ IRB.conf[:IGNORE_SIGINT]=true
105
+ IRB.conf[:IGNORE_EOF]=false
106
+ IRB.conf[:INSPECT_MODE]=nil
107
+ IRB.conf[:IRB_RC] = nil
108
+ IRB.conf[:BACK_TRACE_LIMIT]=16
109
+ IRB.conf[:USE_LOADER] = false
110
+ IRB.conf[:USE_SINGLELINE] = nil
111
+ IRB.conf[:USE_TRACER] = false
112
+ IRB.conf[:IGNORE_SIGINT] = true
113
+ IRB.conf[:IGNORE_EOF] = false
114
+ IRB.conf[:PROMPT_MODE] = :DEFAULT
115
+ IRB.conf[:PROMPT] = {...}
116
+ IRB.conf[:VERBOSE]=true
117
+
118
+ == プロンプトの設定
119
+
120
+ プロンプトをカスタマイズしたい時には,
121
+
122
+ IRB.conf[:PROMPT]
123
+
124
+ を用います. 例えば, .irbrcの中で下のような式を記述します:
125
+
126
+ IRB.conf[:PROMPT][:MY_PROMPT] = { # プロンプトモードの名前
127
+ :PROMPT_I => nil, # 通常のプロンプト
128
+ :PROMPT_N => nil, # 継続行のプロンプト
129
+ :PROMPT_S => nil, # 文字列などの継続行のプロンプト
130
+ :PROMPT_C => nil, # 式が継続している時のプロンプト
131
+ :RETURN => " ==>%s\n" # リターン時のプロンプト
132
+ }
133
+
134
+ プロンプトモードを指定したい時には,
135
+
136
+ irb --prompt my-prompt
137
+
138
+ でそのプロンプトモードで起動されます. または, .irbrcに下式を記述しても
139
+ OKです.
140
+
141
+ IRB.conf[:PROMPT_MODE] = :MY_PROMPT
142
+
143
+ PROMPT_I, PROMPT_N, PROMPT_S, PROMPT_Cは, フォーマットを指定します.
144
+
145
+ %N 起動しているコマンド名が出力される.
146
+ %m mainオブジェクト(self)がto_sで出力される.
147
+ %M mainオブジェクト(self)がinspectされて出力される.
148
+ %l 文字列中のタイプを表す(", ', /, ], `]'は%wの中の時)
149
+ %NNi インデントのレベルを表す. NNは数字が入りprintfの%NNdと同じ. 省
150
+ 略可能
151
+ %NNn 行番号を表します.
152
+ %% %
153
+
154
+ 例えば, デフォルトのプロンプトモードは:
155
+
156
+ IRB.conf[:PROMPT][:DEFAULT] = {
157
+ :PROMPT_I => "%N(%m):%03n:%i> ",
158
+ :PROMPT_N => "%N(%m):%03n:%i> ",
159
+ :PROMPT_S => "%N(%m):%03n:%i%l ",
160
+ :PROMPT_C => "%N(%m):%03n:%i* ",
161
+ :RETURN => "=> %s\n"
162
+ }
163
+
164
+ となっています.
165
+
166
+ RETURNは, 現在のところprintf形式です. 将来仕様が変わるかも知れません.
167
+
168
+ == サブirbの設定
169
+
170
+ コマンドラインオプションおよびIRB.confは(サブ)irb起動時のデフォルトの
171
+ 設定を決めるもので, `5. コマンド'にあるconfで個別の(サブ)irbの設定がで
172
+ きるようになっています.
173
+
174
+ IRB.conf[:IRB_RC]にprocが設定されていると, サブirbを起動する時にその
175
+ procをirbのコンテキストを引数として呼び出します. これによって個別のサ
176
+ ブirbごとに設定を変えることができるようになります.
177
+
178
+
179
+ = コマンド
180
+
181
+ irb拡張コマンドは, 簡単な名前と頭に`irb_'をつけた名前と両方定義されて
182
+ います. これは, 簡単な名前がoverrideされた時のためです.
183
+
184
+ --- exit, quit, irb_exit
185
+ 終了する.
186
+ サブirbの場合, そのサブirbを終了する.
187
+
188
+ --- conf, irb_context
189
+ irbの現在の設定を表示する. 設定の変更は, confにメッセージを送るこ
190
+ とによって行なえる.
191
+
192
+ --- conf.eval_history = N
193
+ 実行結果のヒストリ機能の設定.
194
+ nnは整数かnilで nn>0 であればその数だけヒストリにためる。nn==0の時は
195
+ 無制限に記憶する、nilだとヒストリ機能はやめる(デフォルト).
196
+
197
+ --- Conf.back_trace_limit
198
+ バックトレース表示をバックトレースの頭からn, 後ろからnだけ行なう.
199
+ デフォルトは16
200
+
201
+ --- conf.ignore_eof = true/false
202
+ ^Dが入力された時の動作を設定する. trueの時は^Dを無視する, falseの
203
+ 時はirbを終了する.
204
+
205
+ --- conf.ignore_sigint= true/false
206
+ ^Cが入力された時の動作を設定する. false時は, irbを終了する. trueの
207
+ 時の動作は以下のようになる:
208
+ 入力中: これまで入力したものをキャンセルしトップレベルに戻る.
209
+ 実行中: 実行を中止する.
210
+
211
+ --- conf.inf_ruby_mode = true/false
212
+ inf-ruby-mode用のプロンプト表示を行なう. デフォルトはfalse. 特に指定
213
+ がない限り, ラインエディタは使わなくなる.
214
+
215
+ --- conf.inspect_mode = true/false/nil
216
+ インスペクトモードを設定する.
217
+ true: インスペクトして表示する.
218
+ false: 通常のprintで表示する.
219
+ nil: 通常モードであれば, inspect modeとなり, mathモードの時は, non
220
+ inspect modeとなる.
221
+
222
+ --- conf.use_loader = true/false
223
+ load/require時にirbのfile読み込み機能を用いるモードのスイッチ(デフォ
224
+ ルトは用いない). このモードはIRB全体に反映される.
225
+
226
+ --- conf.prompt_c
227
+ ifの直後など, 行が継続している時のプロンプト.
228
+
229
+ --- conf.prompt_i
230
+ 通常のプロンプト.
231
+
232
+ --- conf.prompt_s
233
+ 文字列中などを表すプロンプト.
234
+
235
+ --- conf.rc
236
+ ~/.irbrcを読み込んだかどうか?
237
+
238
+ --- conf.use_prompt = true/false
239
+ プロンプト表示するかどうか? デフォルトではプロンプトを表示する.
240
+
241
+ --- conf.use_multiline = true/false/nil
242
+ マルチラインエディタを使うかどうか?
243
+ true: マルチラインエディタを使う.
244
+ false: マルチラインエディタを使わない.
245
+ nil: (デフォルト)inf-ruby-mode以外でマルチラインエディタを利用しよう
246
+ とする.
247
+
248
+ --- conf.use_singleline = true/false/nil
249
+ シングルラインエディタを使うかどうか?
250
+ true: シングルラインエディタを使う.
251
+ false: シングルラインエディタを使わない.
252
+ nil: (デフォルト)inf-ruby-modeとマルチラインエディタ以外でシングルラ
253
+ インエディタを利用しようとする.
254
+ #
255
+ #--- conf.verbose=T/F
256
+ # irbからいろいろなメッセージを出力するか?
257
+
258
+ --- cws, chws, irb_cws, irb_chws, irb_change_workspace [obj]
259
+ objをselfとする. objが省略されたときは, home workspace, すなわち
260
+ irbを起動したときのmain objectをselfとする.
261
+
262
+ --- pushws, irb_pushws, irb_push_workspace [obj]
263
+ UNIXシェルコマンドのpushdと同様.
264
+
265
+ --- popws, irb_popws, irb_pop_workspace
266
+ UNIXシェルコマンドのpopdと同様.
267
+
268
+ --- irb [obj]
269
+ サブirbを立ちあげる. objが指定された時は, そのobjをselfとする.
270
+
271
+ --- jobs, irb_jobs
272
+ サブirbのリスト
273
+
274
+ --- fg n, irb_fg n
275
+ 指定したサブirbにスイッチする. nは, 次のものを指定する.
276
+
277
+ irb番号
278
+ スレッド
279
+ irbオブジェクト
280
+ self(irb objで起動した時のobj)
281
+
282
+ --- kill n, irb_kill n
283
+ サブirbをkillする. nはfgと同じ.
284
+
285
+ --- source, irb_source path
286
+ UNIXシェルコマンドのsourceと似ている. 現在の環境上でpath内のスクリ
287
+ プトを評価する.
288
+
289
+ --- irb_load path, prev
290
+
291
+ Rubyのloadのirb版.
292
+
293
+ = システム変数
294
+
295
+ --- _
296
+ 前の計算の実行結果を覚えている(ローカル変数).
297
+ --- __
298
+ 実行結果の履歴を覚えている.
299
+ __[line_no]で、その行で実行した結果を得ることができる. line_noが負の
300
+ 時には、最新の結果から-line_no前の結果を得ることができる.
301
+
302
+ = 使用例
303
+
304
+ 以下のような感じです.
305
+
306
+ dim% ruby irb.rb
307
+ irb(main):001:0> irb # サブirbの立ちあげ
308
+ irb#1(main):001:0> jobs # サブirbのリスト
309
+ #0->irb on main (#<Thread:0x400fb7e4> : stop)
310
+ #1->irb#1 on main (#<Thread:0x40125d64> : running)
311
+ nil
312
+ irb#1(main):002:0> fg 0 # jobのスイッチ
313
+ nil
314
+ irb(main):002:0> class Foo;end
315
+ nil
316
+ irb(main):003:0> irb Foo # Fooをコンテキストしてirb
317
+ # 立ちあげ
318
+ irb#2(Foo):001:0> def foo # Foo#fooの定義
319
+ irb#2(Foo):002:1> print 1
320
+ irb#2(Foo):003:1> end
321
+ nil
322
+ irb#2(Foo):004:0> fg 0 # jobをスイッチ
323
+ nil
324
+ irb(main):004:0> jobs # jobのリスト
325
+ #0->irb on main (#<Thread:0x400fb7e4> : running)
326
+ #1->irb#1 on main (#<Thread:0x40125d64> : stop)
327
+ #2->irb#2 on Foo (#<Thread:0x4011d54c> : stop)
328
+ nil
329
+ irb(main):005:0> Foo.instance_methods # Foo#fooがちゃんと定義さ
330
+ # れている
331
+ ["foo"]
332
+ irb(main):006:0> fg 2 # jobをスイッチ
333
+ nil
334
+ irb#2(Foo):005:0> def bar # Foo#barを定義
335
+ irb#2(Foo):006:1> print "bar"
336
+ irb#2(Foo):007:1> end
337
+ nil
338
+ irb#2(Foo):010:0> Foo.instance_methods
339
+ ["bar", "foo"]
340
+ irb#2(Foo):011:0> fg 0
341
+ nil
342
+ irb(main):007:0> f = Foo.new
343
+ #<Foo:0x4010af3c>
344
+ irb(main):008:0> irb f # Fooのインスタンスでirbを
345
+ # 立ちあげる.
346
+ irb#3(#<Foo:0x4010af3c>):001:0> jobs
347
+ #0->irb on main (#<Thread:0x400fb7e4> : stop)
348
+ #1->irb#1 on main (#<Thread:0x40125d64> : stop)
349
+ #2->irb#2 on Foo (#<Thread:0x4011d54c> : stop)
350
+ #3->irb#3 on #<Foo:0x4010af3c> (#<Thread:0x4010a1e0> : running)
351
+ nil
352
+ irb#3(#<Foo:0x4010af3c>):002:0> foo # f.fooの実行
353
+ nil
354
+ irb#3(#<Foo:0x4010af3c>):003:0> bar # f.barの実行
355
+ barnil
356
+ irb#3(#<Foo:0x4010af3c>):004:0> kill 1, 2, 3# jobのkill
357
+ nil
358
+ irb(main):009:0> jobs
359
+ #0->irb on main (#<Thread:0x400fb7e4> : running)
360
+ nil
361
+ irb(main):010:0> exit # 終了
362
+ dim%
363
+
364
+ = 使用上の制限
365
+
366
+ irbは, 評価できる時点(式が閉じた時点)での逐次実行を行ないます. したがっ
367
+ て, rubyを直接使った時と, 若干異なる動作を行なう場合があります.
368
+
369
+ 現在明らかになっている問題点を説明します.
370
+
371
+ == ローカル変数の宣言
372
+
373
+ rubyでは, 以下のプログラムはエラーになります.
374
+
375
+ eval "foo = 0"
376
+ foo
377
+ --
378
+ -:2: undefined local variable or method `foo' for #<Object:0x40283118> (NameError)
379
+ ---
380
+ NameError
381
+
382
+ ところが, irbを用いると
383
+
384
+ >> eval "foo = 0"
385
+ => 0
386
+ >> foo
387
+ => 0
388
+
389
+ となり, エラーを起こしません. これは, rubyが最初にスクリプト全体をコン
390
+ パイルしてローカル変数を決定するからです. それに対し, irbは実行可能に
391
+ なる(式が閉じる)と自動的に評価しているからです. 上記の例では,
392
+
393
+ eval "foo = 0"
394
+
395
+ を行なった時点で評価を行ない, その時点で変数が定義されるため, 次式で
396
+ 変数fooは定義されているからです.
397
+
398
+ このようなrubyとirbの動作の違いを解決したい場合は, begin...endで括って
399
+ バッチ的に実行して下さい:
400
+
401
+ >> begin
402
+ ?> eval "foo = 0"
403
+ >> foo
404
+ >> end
405
+ NameError: undefined local variable or method `foo' for #<Object:0x4013d0f0>
406
+ (irb):3
407
+ (irb_local_binding):1:in `eval'
408
+
409
+ == ヒアドキュメント
410
+
411
+ 現在のところヒアドキュメントの実装は不完全です.
412
+
413
+ == シンボル
414
+
415
+ シンボルであるかどうかの判断を間違えることがあります. 具体的には式が完了
416
+ しているのに継続行と見なすことがあります.
417
+
418
+ =end
419
+
420
+ % Begin Emacs Environment
421
+ % Local Variables:
422
+ % mode: text
423
+ % comment-column: 0
424
+ % comment-start: "%"
425
+ % comment-end: "\n"
426
+ % End:
427
+ %