undef_method()与remove_method()区别在于:前者取消本类中所有同名方法的定义,包括从父类继承过来的方法,非常绝对。而后者只取消了本类中定义的同名方法的定义,从父类中继承过来的方法仍然可用。
- #父类的定义
- class Base
- def meth
- puts "This is Base#meth"
- end
- end
- #继承类Derived的定义
- class Derived < Base
- def meth
- puts "This is Derived#meth"
- end
-
- #Derived的实例方法obj2.meth没有定义
- #undef_method(:meth)
- end
- #类Test1继承Derived
- class Test < Derived
- def meth
- puts "This is Test1#meth"
- end
-
- #取消方法名和方法定义之间的关系,即使超类中有同名方法,调用时也会发生异常
- #undef_method(:meth)
- #取消当前类中方法名和方法定义之间的关系,此时如果超类中有同名方法,这里依然可以调用
- remove_method(:meth)
- end
- #Test的实例方法obj1.meth没有定义
- obj1 = Test.new
- obj2 = Derived.new
- obj1.meth
- obj2.meth
阅读(1878) | 评论(0) | 转发(0) |