Ruby - 删除继承的方法

时间:2011-08-10 15:40:33

标签: ruby

是否可以删除Ruby中的一些继承方法?我的意思是,我可以覆盖它,但还有其他方法吗?

Class ABC
end

a = ABC.new

puts a.id

此处,方法id继承自Object以及tapclasstype等其他方法。我想删除此类方法。

编辑:我正在使用Ruby 1.8.7

3 个答案:

答案 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