使子实例无法访问实例方法

时间:2016-02-10 10:42:15

标签: ruby oop inheritance visibility

假设:

class Base
  def foo
    puts 'foo!!!'
  end
end

class Ball < Base
end

我想:

  1. Ball.new.foo返回错误:No Method Found
  2. Base.new.foo返回:foo!!!
  3. 我的尝试是:

    • 我可以做protected def foo,这样就可以了。但是这对2不起作用。
    • 我可以像上面给出的那样做,所以2.工作。但是1.不起作用。

    任何想法如何使1.和2.工作?

    问题背景

    我有一个ApplicationController操作def routing_error来处理所有剩余的未定义路由。这个问题是继承ApplicationController的所有其他控制器都继承了该操作,我希望它不是。我可以使用动作def routing_error创建一个单独的控制器,但我觉得它有点矫枉过正,而且只是想知道是否有另一种解决方法。

1 个答案:

答案 0 :(得分:7)

执行:

class Ball < Base
  undef_method :foo
end

如果你想为许多类取消定义方法,并且你不想为每个类编写如上所述的代码,那么在它们之间创建一个类。

class Dummy < Base
  undef_method :foo
end

class Base < Dummy
end

class Base2 < Dummy
end

...