* Object#singleton_methodsについて
  Moduleクラスのインスタンス(==module object)にこれを呼ぶと、
  継承元の特異メソッドも含まれていることに注意

    class A
      def A.x
      end
    end

    class B
      def B.y
      end
    end

  としたとき、B.singleton_methodsでは["x","y"]が返ってくる。
  しかし、class <<B; public_instance_methods; end を評価すると ["y"]が
  返ってくる。こちらを利用すべきだろう。

  
* 関数のように見えるメソッド
  class Object の private method として定義される

* class ScriptFile について
  input が String のインスタンスのときは StringIO を使おう

* rrbにおける制限
  一番最初に指定したファイルがメインである、つまり、"ruby そのファイル"を
  実行でき、かつそのときすべてのファイルをrequireするという仮定をする。
  かつ、そのファイルは実行部をif $0 == __FILE__ then .... end で
  かこっていて、requireされたときはクラス、モジュール、メソッドの定義
  以外何もしてはならない。
  特にstdoutにデータを書きだしたりしたら確実に情報の取得に失敗する。
  
  #{}による式の文字列展開の文字列中に改行が含まれてはいけない

  $__rrb_load_path, $__rrb_loadedというグローバル変数と
  __rrb_load, __rrb_searchという関数を定義したり呼んだりしては
  いけない
  
* RRB::DumpedClassInfo#subclass_of?(classname)
  self と classname が一致していても真を返す点に注意

* rename methodについて
  以下の機能が必要である
  * 指定したクラスから実際に変更する必要のあるクラスをすべて列挙する
  * 名前がかぶっていないかチェックする
  * renameする

* 実際には変更していないファイルについて
  リファクタリングの結果、まったく変更されないファイルは何か目印を
  付けておきたい。emacs側でで変更されていないバッファも更新されてしまうのは
  不便だからである。

  出力時に実際に変更されたファイルのみ出力し、されていないものはしない
  という方法を取ることにした。

  @new_script.nil? が偽である場合のみ出力するようにresult_to_ioを
  変更した

  
* Emacs lispについて
  「`」について http://www.mew.org/~kazu/doc/elisp/backquote.html

* Extract Methodについて
  内部イテレータはAssignedでないローカル変数と扱われるため、yieldが使われていると、
  引数、戻り値に内部イテレータが含まれてしまい、うまく関数抽出ができない
  具体的には、
  class A
    def foo
      xs = [1, 2, 3]
      xs.each {|x| p x}
      xs.each {|x| p x}
    end
  end
  で、3,4行目をextract_methodすると、
  class A
    def bar(x)
      xs = [1, 2, 3]
      xs.each {|x| p x}
      return xs, x
    end 
    def foo
      xs, x = bar(x)
      xs.each {|x| p x}
    end
  end
  となってしまう

* RRB::Namespaceのオブジェクトのキャッシュ
Test suiteで、3.4sec -> 2.8secと向上