Ruby 2.1.0 リファレンスマニュアル > ライブラリ一覧 > 組み込みライブラリ > Moduleクラス > undef_method (private)
undef_method(*name) -> self
[permalink][rdoc]このモジュールのインスタンスメソッド name を未定義にします。
このモジュールのインスタンスに対して name という メソッドを呼び出すことを禁止するということです。 スーパークラスの定義が継承されるかどうかという点において、 「未定義」は「メソッドの削除」とは区別されます。 以下のコード例を参照してください。
class A def ok puts 'A' end end class B < A def ok puts 'B' end end B.new.ok # => B # undef_method の場合はスーパークラスに同名のメソッドがあっても # その呼び出しはエラーになる class B undef_method :ok end B.new.ok # => NameError # remove_method の場合はスーパークラスに同名のメソッドがあると # それが呼ばれる class B remove_method :ok end B.new.ok # => A
また、undef 文と undef_method の違いは、 メソッド名を String または Symbol で与えられることです。
module M1 def foo end def self.moo undef foo end end M1.instance_methods false #=> ["foo"] M1.moo M1.instance_methods false #=> [] module M2 def foo end def self.moo undef_method :foo end end M2.instance_methods false #=> ["foo"] M2.moo M2.instance_methods false #=> []