Rubyリファレンス: Home

undef_method (Module)

Edit   History

標準クラス・モジュール > Module > undef_method

private

undef_method(name, ...)

undef_methodメソッドは、クラスやモジュールのメソッドを未定義にして、呼び出せなくします。引数にはメソッド名をシンボルか文字列で指定します(複数指定できます)。戻り値はクラスやモジュール自身です。

class Cat
  def greet() "meow" end
end
 
cat = Cat.new
puts cat.greet
Cat.class_eval { undef_method :greet }
puts cat.greet rescue p $!
meow
#<NoMethodError: undefined method `greet' for #<Cat:0x59a400>>

親クラスのメソッドをサブクラスで未定義にした場合は、undef_methodを呼び出したクラスとそのサブクラスでメソッドを呼び出せなくなります。ただし、親クラスのメソッドには影響しません。

class Parent
  def greet() "hello" end
end
 
class Child < Parent
  undef_method :greet
end
 
class GrandChild < Child
end
 
puts Parent.new.respond_to?(:greet)
puts Child.new.respond_to?(:greet)
puts GrandChild.respond_to?(:greet)
true
false
false

関連項目