Ruby 中的类变量继承

Dim*_*ets 2 ruby oop inheritance

据我了解,这个问题已经被提出过很多次了。但我找不到有关所有这些变量的完整指南。我发现了几篇比较类变量与类实例变量的文章,但是实例变量呢?那么,实例变量类变量类实例变量

之间有什么区别?什么样的变量是可继承的,什么是不可继承的?

Jör*_*tag 5

实例变量是属于一个特定对象(也称为实例)的变量。在这种情况下,继承是无关紧要的,因为对象不能从任何东西继承,只有类可以。

\n\n

类实例变量不存在。类就像任何其他对象一样是对象,因此它们可以像任何其他对象一样具有实例变量。当类有实例变量时,有时称为类实例变量,但它只是一个实例变量。所以,再次强调,它不能被继承。

\n\n

类变量是奇怪的野兽。它们被共享

\n\n
    \n
  • 班级本身
  • \n
  • 该类的所有实例
  • \n
  • 该类的所有子类
  • \n
  • 该类的所有子类的所有实例
  • \n
  • 该类的所有子类的所有子类
  • \n
  • 该类的所有子类的所有实例
  • \n
  • \xe2\x80\xa6 等等 \xe2\x80\xa6
  • \n
\n\n

考虑到它们的共享范围,它们实际上更像是全局变量。

\n\n

您可以将其称为共享继承,但我认为这不是一个有用的术语。没有多态调度,没有消息发送,没有覆盖。

\n\n

在 Ruby 中,术语“继承”实际上只对方法有意义,而对变量则没有意义。

\n