使子类无法访问实例方法
Making an instance method inaccessible from a subclass
给定:
class Base
def foo
puts 'foo!!!'
end
end
class Ball < Base
end
我要:
Ball.new.foo
到 return 一个错误:No Method Found
.
Base.new.foo
到 return: foo!!!
.
我的尝试是:
- 我可以做到
protected def foo
,这样 1. 就可以了。然而,这不适用于 2.
- 我可以像上面给出的那样做,所以 2. 有效。然而 1. 不起作用。
关于如何使 1. 和 2. 都起作用的任何想法?
问题背景
我有一个 ApplicationController
操作 def routing_error
可以处理所有剩余的未定义路由。这个问题是所有其他继承 ApplicationController
的控制器也继承了那个动作,我希望它不是。我可以仅使用操作 def routing_error
创建一个单独的控制器,但我觉得这太过分了,首先想知道是否有另一种方法可以解决这个问题。
做:
class Ball < Base
undef_method :foo
end
如果您想取消定义许多 class 的方法,并且不想为每个方法编写上面的代码,请在两者之间创建一个 class。
class Dummy < Base
undef_method :foo
end
class Base < Dummy
end
class Base2 < Dummy
end
...
给定:
class Base
def foo
puts 'foo!!!'
end
end
class Ball < Base
end
我要:
Ball.new.foo
到 return 一个错误:No Method Found
.Base.new.foo
到 return:foo!!!
.
我的尝试是:
- 我可以做到
protected def foo
,这样 1. 就可以了。然而,这不适用于 2. - 我可以像上面给出的那样做,所以 2. 有效。然而 1. 不起作用。
关于如何使 1. 和 2. 都起作用的任何想法?
问题背景
我有一个 ApplicationController
操作 def routing_error
可以处理所有剩余的未定义路由。这个问题是所有其他继承 ApplicationController
的控制器也继承了那个动作,我希望它不是。我可以仅使用操作 def routing_error
创建一个单独的控制器,但我觉得这太过分了,首先想知道是否有另一种方法可以解决这个问题。
做:
class Ball < Base
undef_method :foo
end
如果您想取消定义许多 class 的方法,并且不想为每个方法编写上面的代码,请在两者之间创建一个 class。
class Dummy < Base
undef_method :foo
end
class Base < Dummy
end
class Base2 < Dummy
end
...