PR

 undefによく似た機能としてremove_methodがあります。当該クラスのメソッドのみを取り除くことが特徴です。対象となるクラスにメソッドが定義されていない場合にはエラーになります(図2)。

class C1  <  Object
  # クラスC1が提供するメソッド
  def method1
  end
end

class C2  <  C1
  # クラスC2が提供するメソッド
  def method2
  end
  # C2のmethod2を取り除く
  remove_method :method2
  # C1のmethod1を取り除く
  remove_method :method1
  # method1はC2にはないのでエラー
end
図2●remove_methodを用いてメソッドを削除した例

 aliasはメソッドに別名を付けます(図3)。

class C3  <  Object
  def foo
    puts "foo!"
  end
  # fooメソッドにbarという別名
  alias bar foo
end

c3 = C3.new
c3.foo # 「foo!」を出力
c3.bar # やはり「foo!」を出力
図3●aliasを用いてメソッドに別名を付けた例

 別名を付けられたメソッドは名前が違うだけで,元のメソッドと全く同じ動きをします。しかし,元のメソッドをundefやremove_methodで取り除いても別名の方は問題なく動作します(図4)。

class C3  <  Object
  def foo
    puts "foo!"
  end
  # fooメソッドに別名barを付ける
  alias bar foo
  undef foo
end

c3 = C3.new
c3.bar # 「foo!」を出力
c3.foo # エラー
図4●aliasの動作例

 aliasはメソッドではなく,Rubyの文法の一部です。undefにメソッド版のundef_methodがあったのと同様に,aliasと同じ機能を備えた,メソッド版のalias_methodが存在します。

 includeは,クラスやモジュールに別のモジュールが持っているメソッドや定数を取り込むための機能です。これはundefやaliasのように直接メソッドを操作する機能ではありませんが,オープンクラスによって,既存のクラスにモジュールの機能を追加します。