irb 1.1.1 → 1.2.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: fc28457f7b997cac6ec910290d58677ee4d21b71bb769c421840b77242dddc04
4
- data.tar.gz: af7a068e8bbef2cc1aec4be90b907b959da162bc0442183cee45d4ef0e39bea5
3
+ metadata.gz: 30fc838baf1c1769c8ff1b3cc064e8c443dceb16fb997d6f7e53845b981990dd
4
+ data.tar.gz: 48abb8ba8d3af2b3705cdbaddb47fc74dcaece6b5f074f655dfb426002e15c3c
5
5
  SHA512:
6
- metadata.gz: 0770a8ef428fd8f604509b67ee2e796672f243b3736e385b128e0dc9354cb6283531612ff60d46fffcb06d89b6de65d1eaf7fb0f6e8e032a9058f349285c6b3d
7
- data.tar.gz: 48d11c9ddabe1639331330cc8aa5f30a5f5306b5852c404377dda2527ed86e8767d783811f20e8b02783447df9adb5315d4fa1bce4422aab7774ab8140075e44
6
+ metadata.gz: 29150c7100e2bc250281771a7c268073fd80c49fc80244945e7c067ff3cd4ff02cf09aa5b0f0efb2c701e4e62291c47978375293622e7deddeb64c11453eca42
7
+ data.tar.gz: e5216092d990b27d4390f2b80470edb7c2aefb955f4ef6ffa118270335761f15df5acbdcc6e00205e930be0d8b596aae50cc88249675cacb320b62adec91672e
data/Gemfile CHANGED
@@ -3,3 +3,8 @@ source "https://rubygems.org"
3
3
  git_source(:github) {|repo_name| "https://github.com/#{repo_name}" }
4
4
 
5
5
  gemspec
6
+
7
+ # TODO: remove this when reline with `Reline::Unicode.escape_for_print` is released.
8
+ if Gem::Version.new(RUBY_VERSION) < Gem::Version.new('2.7.0')
9
+ gem "reline", github: "ruby/reline"
10
+ end
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
  ```
@@ -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
+
@@ -0,0 +1,411 @@
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
+ -m bcモード(分数, 行列の計算ができる)
44
+ -d $DEBUG をtrueにする(ruby -d と同じ)
45
+ -Kc ruby -Kcと同じ
46
+ -r load-module ruby -r と同じ.
47
+ --verbose これから実行する行を表示する(デフォルト)
48
+ --noverbose これから実行する行を表示しない
49
+ --echo 実行結果を表示する(デフォルト)
50
+ --noecho 実行結果を表示しない
51
+ --inspect 結果出力にinspectを用いる(bcモード以外はデフォルト).
52
+ --noinspect 結果出力にinspectを用いない.
53
+ --singleline シングルラインエディタを利用する.
54
+ --nosingleline シングルラインエディタを利用しない. デフォルトの動
55
+ 作は, inf-ruby-mode以外でシングルラインエディタを利
56
+ 用しようとする.
57
+ --colorize 色付けを利用する.
58
+ --nocolorize 色付けを利用しない.
59
+ --prompt prompt-mode
60
+ --prompt-mode prompt-mode
61
+ プロンプトモードを切替えます. 現在定義されているプ
62
+ ロンプトモードは, default, simple, xmp, inf-rubyが
63
+ 用意されています. デフォルトはdefaultプロンプトモー
64
+ ドになっています.
65
+
66
+ --inf-ruby-mode emacsのinf-ruby-mode用のプロンプト表示を行なう. 特
67
+ に指定がない限り, ラインエディタは使わなくなる.
68
+ --simple-prompt
69
+ 非常にシンプルなプロンプトを用いるモードです.
70
+ --noprompt プロンプト表示を行なわない.
71
+ --tracer コマンド実行時にトレースを行なう.
72
+ --back-trace-limit n
73
+ バックトレース表示をバックトレースの頭から n, 後ろ
74
+ からnだけ行なう. デフォルトは16
75
+ -v, --version irbのバージョンを表示する
76
+
77
+ = コンフィギュレーション
78
+
79
+ irb起動時に``~/.irbrc''を読み込みます. もし存在しない場合は,
80
+ ``.irbrc'', ``irb.rc'', ``_irbrc'', ``$irbrc''の順にloadを試みます.
81
+
82
+ オプションを設定する代わりに, 以下のコマンドでもデフォルトの動作を設定
83
+ できます.
84
+
85
+ IRB.conf[:IRB_NAME]="irb"
86
+ IRB.conf[:USE_TRACER]=false
87
+ IRB.conf[:USE_LOADER]=false
88
+ IRB.conf[:IGNORE_SIGINT]=true
89
+ IRB.conf[:IGNORE_EOF]=false
90
+ IRB.conf[:INSPECT_MODE]=nil
91
+ IRB.conf[:IRB_RC] = nil
92
+ IRB.conf[:BACK_TRACE_LIMIT]=16
93
+ IRB.conf[:USE_LOADER] = false
94
+ IRB.conf[:USE_SINGLELINE] = nil
95
+ IRB.conf[:USE_TRACER] = false
96
+ IRB.conf[:IGNORE_SIGINT] = true
97
+ IRB.conf[:IGNORE_EOF] = false
98
+ IRB.conf[:PROMPT_MODE] = :DEFAULT
99
+ IRB.conf[:PROMPT] = {...}
100
+ IRB.conf[:VERBOSE]=true
101
+
102
+ == プロンプトの設定
103
+
104
+ プロンプトをカスタマイズしたい時には,
105
+
106
+ IRB.conf[:PROMPT]
107
+
108
+ を用います. 例えば, .irbrcの中で下のような式を記述します:
109
+
110
+ IRB.conf[:PROMPT][:MY_PROMPT] = { # プロンプトモードの名前
111
+ :PROMPT_I => nil, # 通常のプロンプト
112
+ :PROMPT_N => nil, # 継続行のプロンプト
113
+ :PROMPT_S => nil, # 文字列などの継続行のプロンプト
114
+ :PROMPT_C => nil, # 式が継続している時のプロンプト
115
+ :RETURN => " ==>%s\n" # リターン時のプロンプト
116
+ }
117
+
118
+ プロンプトモードを指定したい時には,
119
+
120
+ irb --prompt my-prompt
121
+
122
+ でそのプロンプトモードで起動されます. または, .irbrcに下式を記述しても
123
+ OKです.
124
+
125
+ IRB.conf[:PROMPT_MODE] = :MY_PROMPT
126
+
127
+ PROMPT_I, PROMPT_N, PROMPT_S, PROMPT_Cは, フォーマットを指定します.
128
+
129
+ %N 起動しているコマンド名が出力される.
130
+ %m mainオブジェクト(self)がto_sで出力される.
131
+ %M mainオブジェクト(self)がinspectされて出力される.
132
+ %l 文字列中のタイプを表す(", ', /, ], `]'は%wの中の時)
133
+ %NNi インデントのレベルを表す. NNは数字が入りprintfの%NNdと同じ. 省
134
+ 略可能
135
+ %NNn 行番号を表します.
136
+ %% %
137
+
138
+ 例えば, デフォルトのプロンプトモードは:
139
+
140
+ IRB.conf[:PROMPT_MODE][:DEFAULT] = {
141
+ :PROMPT_I => "%N(%m):%03n:%i> ",
142
+ :PROMPT_N => "%N(%m):%03n:%i> ",
143
+ :PROMPT_S => "%N(%m):%03n:%i%l ",
144
+ :PROMPT_C => "%N(%m):%03n:%i* ",
145
+ :RETURN => "%s\n"
146
+ }
147
+
148
+ となっています.
149
+
150
+ RETURNは, 現在のところprintf形式です. 将来仕様が変わるかも知れません.
151
+
152
+ == サブirbの設定
153
+
154
+ コマンドラインオプションおよびIRB.confは(サブ)irb起動時のデフォルトの
155
+ 設定を決めるもので, `5. コマンド'にあるconfで個別の(サブ)irbの設定がで
156
+ きるようになっています.
157
+
158
+ IRB.conf[:IRB_RC]にprocが設定されていると, サブirbを起動する時にその
159
+ procをirbのコンテキストを引数として呼び出します. これによって個別のサ
160
+ ブirbごとに設定を変えることができるようになります.
161
+
162
+
163
+ = コマンド
164
+
165
+ irb拡張コマンドは, 簡単な名前と頭に`irb_'をつけた名前と両方定義されて
166
+ います. これは, 簡単な名前がoverrideされた時のためです.
167
+
168
+ --- exit, quit, irb_exit
169
+ 終了する.
170
+ サブirbの場合, そのサブirbを終了する.
171
+
172
+ --- conf, irb_context
173
+ irbの現在の設定を表示する. 設定の変更は, confにメッセージを送るこ
174
+ とによって行なえる.
175
+
176
+ --- conf.eval_history = N
177
+ 実行結果のヒストリ機能の設定.
178
+ nnは整数かnilで nn>0 であればその数だけヒストリにためる。nn==0の時は
179
+ 無制限に記憶する、nilだとヒストリ機能はやめる(デフォルト).
180
+
181
+ --- Conf.back_trace_limit
182
+ バックトレース表示をバックトレースの頭からn, 後ろからnだけ行なう.
183
+ デフォルトは16
184
+
185
+ --- conf.ignore_eof = true/false
186
+ ^Dが入力された時の動作を設定する. trueの時は^Dを無視する, falseの
187
+ 時はirbを終了する.
188
+
189
+ --- conf.ignore_sigint= true/false
190
+ ^Cが入力された時の動作を設定する. false時は, irbを終了する. trueの
191
+ 時の動作は以下のようになる:
192
+ 入力中: これまで入力したものをキャンセルしトップレベルに戻る.
193
+ 実行中: 実行を中止する.
194
+
195
+ --- conf.inf_ruby_mode = true/false
196
+ inf-ruby-mode用のプロンプト表示を行なう. デフォルトはfalse. 特に指定
197
+ がない限り, ラインエディタは使わなくなる.
198
+
199
+ --- conf.inspect_mode = true/false/nil
200
+ インスペクトモードを設定する.
201
+ true: インスペクトして表示する.
202
+ false: 通常のprintで表示する.
203
+ nil: 通常モードであれば, inspect modeとなり, mathモードの時は, non
204
+ inspect modeとなる.
205
+
206
+ --- conf.use_loader = true/false
207
+ load/require時にirbのfile読み込み機能を用いるモードのスイッチ(デフォ
208
+ ルトは用いない). このモードはIRB全体に反映される.
209
+
210
+ --- conf.prompt_c
211
+ ifの直後など, 行が継続している時のプロンプト.
212
+
213
+ --- conf.prompt_i
214
+ 通常のプロンプト.
215
+
216
+ --- conf.prompt_s
217
+ 文字列中などを表すプロンプト.
218
+
219
+ --- conf.rc
220
+ ~/.irbrcを読み込んだかどうか?
221
+
222
+ --- conf.use_prompt = true/false
223
+ プロンプト表示するかどうか? デフォルトではプロンプトを表示する.
224
+
225
+ --- conf.use_multiline = true/false/nil
226
+ マルチラインエディタを使うかどうか?
227
+ true: マルチラインエディタを使う.
228
+ false: マルチラインエディタを使わない.
229
+ nil: (デフォルト)inf-ruby-mode以外でマルチラインエディタを利用しよう
230
+ とする.
231
+
232
+ --- conf.use_singleline = true/false/nil
233
+ シングルラインエディタを使うかどうか?
234
+ true: シングルラインエディタを使う.
235
+ false: シングルラインエディタを使わない.
236
+ nil: (デフォルト)inf-ruby-modeとマルチラインエディタ以外でシングルラ
237
+ インエディタを利用しようとする.
238
+ #
239
+ #--- conf.verbose=T/F
240
+ # irbからいろいろなメッセージを出力するか?
241
+
242
+ --- cws, chws, irb_cws, irb_chws, irb_change_workspace [obj]
243
+ objをselfとする. objが省略されたときは, home workspace, すなわち
244
+ irbを起動したときのmain objectをselfとする.
245
+
246
+ --- pushws, irb_pushws, irb_push_workspace [obj]
247
+ UNIXシェルコマンドのpushdと同様.
248
+
249
+ --- popws, irb_popws, irb_pop_workspace
250
+ UNIXシェルコマンドのpopdと同様.
251
+
252
+ --- irb [obj]
253
+ サブirbを立ちあげる. objが指定された時は, そのobjをselfとする.
254
+
255
+ --- jobs, irb_jobs
256
+ サブirbのリスト
257
+
258
+ --- fg n, irb_fg n
259
+ 指定したサブirbにスイッチする. nは, 次のものを指定する.
260
+
261
+ irb番号
262
+ スレッド
263
+ irbオブジェクト
264
+ self(irb objで起動した時のobj)
265
+
266
+ --- kill n, irb_kill n
267
+ サブirbをkillする. nはfgと同じ.
268
+
269
+ --- source, irb_source path
270
+ UNIXシェルコマンドのsourceと似ている. 現在の環境上でpath内のスクリ
271
+ プトを評価する.
272
+
273
+ --- irb_load path, prev
274
+
275
+ Rubyのloadのirb版.
276
+
277
+ = システム変数
278
+
279
+ --- _
280
+ 前の計算の実行結果を覚えている(ローカル変数).
281
+ --- __
282
+ 実行結果の履歴を覚えている.
283
+ __[line_no]で、その行で実行した結果を得ることができる. line_noが負の
284
+ 時には、最新の結果から-line_no前の結果を得ることができる.
285
+
286
+ = 使用例
287
+
288
+ 以下のような感じです.
289
+
290
+ dim% ruby irb.rb
291
+ irb(main):001:0> irb # サブirbの立ちあげ
292
+ irb#1(main):001:0> jobs # サブirbのリスト
293
+ #0->irb on main (#<Thread:0x400fb7e4> : stop)
294
+ #1->irb#1 on main (#<Thread:0x40125d64> : running)
295
+ nil
296
+ irb#1(main):002:0> fg 0 # jobのスイッチ
297
+ nil
298
+ irb(main):002:0> class Foo;end
299
+ nil
300
+ irb(main):003:0> irb Foo # Fooをコンテキストしてirb
301
+ # 立ちあげ
302
+ irb#2(Foo):001:0> def foo # Foo#fooの定義
303
+ irb#2(Foo):002:1> print 1
304
+ irb#2(Foo):003:1> end
305
+ nil
306
+ irb#2(Foo):004:0> fg 0 # jobをスイッチ
307
+ nil
308
+ irb(main):004:0> jobs # jobのリスト
309
+ #0->irb on main (#<Thread:0x400fb7e4> : running)
310
+ #1->irb#1 on main (#<Thread:0x40125d64> : stop)
311
+ #2->irb#2 on Foo (#<Thread:0x4011d54c> : stop)
312
+ nil
313
+ irb(main):005:0> Foo.instance_methods # Foo#fooがちゃんと定義さ
314
+ # れている
315
+ ["foo"]
316
+ irb(main):006:0> fg 2 # jobをスイッチ
317
+ nil
318
+ irb#2(Foo):005:0> def bar # Foo#barを定義
319
+ irb#2(Foo):006:1> print "bar"
320
+ irb#2(Foo):007:1> end
321
+ nil
322
+ irb#2(Foo):010:0> Foo.instance_methods
323
+ ["bar", "foo"]
324
+ irb#2(Foo):011:0> fg 0
325
+ nil
326
+ irb(main):007:0> f = Foo.new
327
+ #<Foo:0x4010af3c>
328
+ irb(main):008:0> irb f # Fooのインスタンスでirbを
329
+ # 立ちあげる.
330
+ irb#3(#<Foo:0x4010af3c>):001:0> jobs
331
+ #0->irb on main (#<Thread:0x400fb7e4> : stop)
332
+ #1->irb#1 on main (#<Thread:0x40125d64> : stop)
333
+ #2->irb#2 on Foo (#<Thread:0x4011d54c> : stop)
334
+ #3->irb#3 on #<Foo:0x4010af3c> (#<Thread:0x4010a1e0> : running)
335
+ nil
336
+ irb#3(#<Foo:0x4010af3c>):002:0> foo # f.fooの実行
337
+ nil
338
+ irb#3(#<Foo:0x4010af3c>):003:0> bar # f.barの実行
339
+ barnil
340
+ irb#3(#<Foo:0x4010af3c>):004:0> kill 1, 2, 3# jobのkill
341
+ nil
342
+ irb(main):009:0> jobs
343
+ #0->irb on main (#<Thread:0x400fb7e4> : running)
344
+ nil
345
+ irb(main):010:0> exit # 終了
346
+ dim%
347
+
348
+ = 使用上の制限
349
+
350
+ irbは, 評価できる時点(式が閉じた時点)での逐次実行を行ないます. したがっ
351
+ て, rubyを直接使った時と, 若干異なる動作を行なう場合があります.
352
+
353
+ 現在明らかになっている問題点を説明します.
354
+
355
+ == ローカル変数の宣言
356
+
357
+ rubyでは, 以下のプログラムはエラーになります.
358
+
359
+ eval "foo = 0"
360
+ foo
361
+ --
362
+ -:2: undefined local variable or method `foo' for #<Object:0x40283118> (NameError)
363
+ ---
364
+ NameError
365
+
366
+ ところが, irbを用いると
367
+
368
+ >> eval "foo = 0"
369
+ => 0
370
+ >> foo
371
+ => 0
372
+
373
+ となり, エラーを起こしません. これは, rubyが最初にスクリプト全体をコン
374
+ パイルしてローカル変数を決定するからです. それに対し, irbは実行可能に
375
+ なる(式が閉じる)と自動的に評価しているからです. 上記の例では,
376
+
377
+ evel "foo = 0"
378
+
379
+ を行なった時点で評価を行ない, その時点で変数が定義されるため, 次式で
380
+ 変数fooは定義されているからです.
381
+
382
+ このようなrubyとirbの動作の違いを解決したい場合は, begin...endで括って
383
+ バッチ的に実行して下さい:
384
+
385
+ >> begin
386
+ ?> eval "foo = 0"
387
+ >> foo
388
+ >> end
389
+ NameError: undefined local variable or method `foo' for #<Object:0x4013d0f0>
390
+ (irb):3
391
+ (irb_local_binding):1:in `eval'
392
+
393
+ == ヒアドキュメント
394
+
395
+ 現在のところヒアドキュメントの実装は不完全です.
396
+
397
+ == シンボル
398
+
399
+ シンボルであるかどうかの判断を間違えることがあります. 具体的には式が完了
400
+ しているのに継続行と見なすことがあります.
401
+
402
+ =end
403
+
404
+ % Begin Emacs Environment
405
+ % Local Variables:
406
+ % mode: text
407
+ % comment-column: 0
408
+ % comment-start: "%"
409
+ % comment-end: "\n"
410
+ % End:
411
+ %