From: rubikitch Date: 2002-08-29T18:40:42+09:00 Subject: [ruby-list:35816] [ANN] irbsh-0.8.0 るびきちです。 irbsh 0.8.0をリリースしました。 4ヶ月以上間を開けてしまいました(^^; http://www.ruby-lang.org/~rubikitch/computer/irbsh/ 新機能は「評価リスト」です! 評価リストによって、irbshをスクリプト開発支援にも使えるようになりました。 以下ドキュメントからの抜粋です。 == 評価リスト Ver0.8.0からの新機能として「評価リスト」が加わった。 評価リストとは、評価したい式をあらかじめ登録しておき、ワンタッチで実行できるようにするためのものである。 何度も評価したい場合でも同じ式を何度も入力する必要がなくなる。 この機能がもっとも威力を発揮するとき、それはメソッドの動作を試行錯誤するときだ。 というわけで、評価リストはスクリプトと連動するように作られている。 評価リストの立ち上げ方は「C-c M-e」、実行は「C-c C-z」だ。 === *ruby scratch*バッファ irbshバッファにて「C-c M-e」を押すと画面が3分割される。 上に*ruby scratch*バッファ、下にirbshバッファと評価リストバッファとなる。 評価リストバッファのウィンドウが選択されるようになる。 *ruby scratch*バッファはruby-modeで任意のRubyスクリプトを書くことができる。 また、評価リストバッファには評価したい式を続けて書くようになっている。 評価リストバッファの内容はirbで1文1文解釈されるので、複数個書いても全然平気だ。 評価リストに式を書いたあとは「C-c C-z」を押す! この「C-c C-z」はirbshバッファでも評価リストバッファでも*ruby scratch*バッファでも、どのバッファにいてても有効だ。 *ruby scratch*バッファの内容がloadされ、その直後に評価リストが評価されるようになる。 例を示そう。 *ruby scratch*バッファに def f(x) x ** 2 end と書き、評価リストに f(0) f(1) f(2) f(3) と書いたとき、irbshには次のように出力される。 irbsh[27@16:03](main):085:0> EvalList(main):086:0> f(0) 0 EvalList(main):087:0> f(1) 1 EvalList(main):088:0> f(2) 4 EvalList(main):089:0> f(3) 9 EvalList(main):090:0> nil 最後のnilはゴミなので気にしなくてよい。 スクリプトを変更したときでも一発で評価リストの内容を評価してくれる。 ここでf(x)の内容を次のように変更しよう。 def f(x) x ** 2 end そして、「C-c C-z」を押す! irbsh[27@16:36](main):090:0> EvalList(main):091:0> f(0) 0 EvalList(main):092:0> f(1) 1 EvalList(main):093:0> f(2) 8 EvalList(main):094:0> f(3) 27 EvalList(main):095:0> nil たったこれだけで変更後のスクリプトを試すことができる! わざわざセーブしたりするような手間が省けるのでとても便利だ、是非とも活用しよう。 === 任意のruby-modeのバッファでもok さきほど *ruby scratch* バッファでの例を示したが、実は任意のruby-modeのバッファでも可能だ。 ruby-modeのバッファ上で「C-c M-e」を押してみよう。 画面が3分割されてirbshバッファ、評価リストバッファが現れる。 以後、*ruby scratch*バッファも含め、ruby-modeなバッファを「スクリプトバッファ」と呼ぶことにする。 たとえば、以下のスクリプトtest.rbがあったとする。 #!/usr/bin/env ruby def f(x) x ** 2 end if __FILE__ == $0 p f(10) end そこで前の例と同じように評価リストに f(0) f(1) f(2) f(3) と書いて「C-c C-z」を押すと、同じ結果がでてくる。 ここでポイントとなるのが if __FILE__ == $0 end でかこまれた部分だ。 その部分はスクリプトをコマンドとして実行するときのみ実行されるコードとなる。 よって、irbshでloadされるときには実行されないことに注意したい。 スクリプト開発でメソッドの動作を試行錯誤したいとき、メソッドを着実に作成したいときに評価リストを活用しよう!! 特に使い棄てスクリプトをさっさと作成するときに、 『このメソッドは確実に動いてほしいんだけど、かといってRubyUnit使うのは大袈裟だな』 という場合においては非常に威力を発揮する。 === エラージャンプ機能 評価リストの大事な機能として、評価リスト実行中にエラーが発生したとき、スクリプトバッファのエラー箇所へジャンプする機能だ。 たとえば、スクリプトバッファの内容が以下のようになっているものとしよう。 わざとエラーを発生させていることに注意。 説明のために行番号をつけている。 1: def f(x) 2: x ** 3: end 4: 5: def g(x) 6: f(x) 7: end そして、評価リストを g 1 としよう。そこで「C-c C-z」すると当然のことながらエラーメッセージがでる。 irbsh[29@18:09](main):014:0> SyntaxError: /home/rubikitch/.irbsh_eval_tmp:3: parse error /home/rubikitch/.irbsh_eval_tmp:5: nested method definition def g(x) ^ /home/rubikitch/.irbsh_eval_tmp:7: parse error from /home/rubikitch/src/irbsh/irbsh-lib.rb:418:in `load' from /home/rubikitch/src/irbsh/irbsh-lib.rb:418:in `irbsh_load_script_and_eval_eval_list' from (irbsh):14 /home/rubikitch/.irbsh_eval_tmpはスクリプトバッファを一時的に保存したファイルである。 デフォルトでは ~/.irbsh_eval_tmp に保存される。 そこで、「C-c `」を押すとスクリプトバッファの3行目に移る。 もう一度押すと5行目、もう一度押すと7行目に移る。 さらにもう一度押したら何も起きない。 スクリプトバッファすなわち .irbsh_eval_tmp でのエラー行へジャンプするようになっている。 なお、「C-u 数 C-c `」を押すとその数だけジャンプするようになる。 負の数を指定すると前のエラーメッセージへ戻る。 るびきち☆ http://www.ruby-lang.org/~rubikitch/ ←Ruby大衆化計画(笑)