人気ブログランキング | 話題のタグを見る

irb.rb その4 Irb クラス

IRB モジュールの定義の次は、Irb クラスが定義されている。

Irb クラスの構成は次のようになっている。

class Irb
  @context --- read only, Context クラスのオブジェクト
  @signal_status --- 初期値は :IN_IRB シンボル
  @scanner --- read/write, RubyLex クラスのオブジェクト

  initialize(workspace = nil, input_method = nil, output_method = nil)
  eval_input
  suspend_name(path = nil, name = nil)
  suspend_workspace(workspace)
  suspend_input_method(input_method)
  suspend_context(context)
  signal_handle
  signal_status(status)
  prompt(prompt, ltype, indent, line_no)
  output_value
  inspect
  @CONF.inspect ---- @CONF は IRB モジュールで定義されている
end

わりにシンプルな構成だ。

インスタンス変数のうち、@context は、irb のカスタマイズに関係していると思われるし、@singnal_status はプロセスのシグナル関係だろう。目的のスキャナー/パーサに関係しているのは、@scanner のようで、これは、Rubylex クラスのオブジェクトだ。

インスタンス・メソッドの initialize はコンストラクタ。eval_input はコマンドラインからの入力処理。この eval_input を追いかけていけばスキャナに到達できるような気がする。先頭に susupend のついているメソッドは、現在の動作環境の一時退避をするためのメソッドではないだろうか。prompt はプロンプトの設定。output_valu, inspect, @CONF.inspect はデータを出力するときの処理をしているのだろう。

大きなプログラムを組んだことがないので、ファイル分割は面倒くさいと思っていたが、こういう風にトップダウンにソースを追いかけていくと、個々のソースの意味が把握しやすくなるので結構便利なものだと思った。
by tnomura9 | 2008-03-31 07:18 | Ruby | Comments(0)
<< irb.rb その5 eval... irb.rb その3 IRB ... >>