是否可以删除Ruby中的一些继承方法?我的意思是,我可以覆盖它,但还有其他方法吗?
Class ABC
end
a = ABC.new
puts a.id
此处,方法id
继承自Object
以及tap
,class
,type
等其他方法。我想删除此类方法。
编辑:我正在使用Ruby 1.8.7
答案 0 :(得分:16)
是的 - undef_method :foo
会阻止对方法foo
的任何调用(与remove_method :foo
形成对比,后者会从子项中删除该方法,但仍会传递继承链)。< / p>
再一次,为什么你想删除id
之类的内容?
答案 1 :(得分:3)
您始终可以创建一个空白的平板类来派生自:
class BlankSlate
instance_methods.each do |m|
undef_method(m) unless (m.match(/^__/))
end
end
这应该删除所有方法,除了你不应该混淆的内部方法,例如__send__
。
答案 2 :(得分:2)
正如tadman所说,你可以创建一个BlankSlate对象,或者在ruby 1.9中,有一个BasicObject类,它只有很少的方法。一个快速的谷歌搜索出现了这个进一步阅读:http://www.humbug.in/docs/ruby-best-practices/I_sect13_d1e2654.html
看来Rails已经内置了BlankSlate:http://rubydoc.info/docs/rails/2.3.8/BlankSlate