在 Ruby 中调用受保护的超类类方法
我想从基类中的实例方法调用受保护的超类类方法。
class A
class << self
protected
def foo
puts "In foo"
end
end
end
class B < A
def bar
puts "In bar"
# call A::foo
end
end
最好的方法是什么?
I want to call a protected superclass class method from an instance method in the base class.
class A
class << self
protected
def foo
puts "In foo"
end
end
end
class B < A
def bar
puts "In bar"
# call A::foo
end
end
What's the best way to do this?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
... 2.67 年后 ...
解决这个问题的更简单方法是使用 class_eval
... 2.67 years later ...
A simpler way to solve this is with class_eval
重写B中的方法,调用super:
Override the method in B, calling super:
到目前为止,我找到的唯一解决方案是在子类中定义一个类方法,该方法调用超类中的类方法。然后我可以在子类的实例方法中调用这个方法。
这真的有必要吗?
So far, the only solution I've found is to define a class method in the subclass that calls the class method in the superclass. Then I can call this method in the subclass' instance method.
Is this really necessary?
我可能会把 A.foo 公开。否则
send
会执行此操作,因为它绕过访问控制:I'd probably just make A.foo public. Otherwise
send
will do it, since it bypasses access controls: