当前位置:  开发笔记 > 后端 > 正文

如何在ruby中使基类方法不可覆盖?

如何解决《如何在ruby中使基类方法不可覆盖?》经验,为你挑选了1个好方法。

我有一些基类A,其方法不能被覆盖.

class A
  def dont_override_me
    puts 'class A saying, "Thank you for not overriding me!"'
  end
end

另一个扩展A并尝试覆盖该dont_override_me方法的B类.

class B < A
  def dont_override_me
    puts 'class B saying, "This is my implementation!"'        
  end
end

如果我实例化B并调用dont_override_me,将调用B 类的实例方法.

b = B.new
b.dont_override_me # => class B saying, "This is my implementation!"

这是因为ruby的属性.可以理解的.

但是,如何dont_override_me通过派生类强制基类方法不可覆盖?我找不到类似finaljava for ruby 的关键字.在C++中,基类方法可以是非虚拟的,这样它们就不会被派生类覆盖.我如何在ruby中实现这一目标?



1> Steven Robbi..:

您可以通过挂钩更改事件并将其更改回来来实现,但对我来说似乎有点臭:

http://scie.nti.st/2008/9/17/making-methods-immutable-in-ruby

这是那些定义Ruby的东西之一,因此与它作斗争似乎有点毫无意义.如果某人重新定义了某些东西,那么它就会破碎......这就是他们的问题;-)

推荐阅读
小色米虫_524
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有