我在第三方gem的超类中有一个方法,我想隐藏它。我宁愿如果根本不可能调用这个方法,那么不要只是覆盖它并将身体留空。
答案 0 :(得分:3)
我相信这可能是你正在寻找的东西:
undef_method :foo
这将阻止对方法foo
的任何调用。
相反,这不会达到同样的效果:
remove_method :foo
这将从子进程中删除该方法,但仍会传递继承链。
答案 1 :(得分:3)
使用undef
关键字。
class A
def foo
5
end
end
class B < A
undef foo
end
A.new.foo #=> 5
B.new.foo #=> NameError: undefined local variable or method `foo'
答案 2 :(得分:2)
你试图在那里做OOP是错误的。我建议你使用组合而不是继承。
require 'forwardable'
class SomeBaseClass
def foo
puts 'foo'
end
def bar
puts 'bar'
end
def quux
puts 'quux'
end
end
class MyClass
def initialize
@base = SomeBaseClass.new
end
extend Forwardable
def_delegators :@base, :foo, :bar # but not quux
end
mc = MyClass.new
mc.foo
mc.bar
mc.quux
# >> foo
# >> bar
# ~> -:32:in `<main>': undefined method `quux' for #<MyClass:0x007febcc155210> (NoMethodError)