移除方法
除了创建新方法之外,有时你可能希望移除现有方法。你可以通过在特定类作用域内使用 remove_method
执行此操作。这将删除特定类中指定符号的方法:
rem_methods1.rb
puts( "hello".reverse )
class String
remove_method( :reverse )
end
puts( "hello".reverse ) #=> "undefined method" error!
如果为该类的祖先类定义了具有相同名称的方法,则不会删除祖先类中的同名方法:
rem_methods2.rb
class Y
def somemethod
puts("Y's somemethod")
end
end
class Z < Y
def somemethod
puts("Z's somemethod")
end
end
zob = Z.new
zob.somemethod #=> "Z's somemethod"
class Z
remove_method( :somemethod )
end
zob.somemethod #=> "Y's somemethod"
相反,undef_method
阻止指定的类响应方法调用,即使在其一个祖先类中定义了一个具有相同名称的方法:
undef_methods.rb
zob = Z.new
zob.somemethod #=> "Z's somemethod"
class Z
undef_method( :somemethod )
end
zob.somemethod #=> "undefined method" error