关于ruby:类方法,实例方法,实例变量,类变量之间的区别?

difference between class method , instance method , instance variable , class variable?

我最近开始学习Ruby。我对类方法、实例方法、实例变量和类变量感到困惑。我在谷歌上搜索了很多,但没有得到任何澄清。如有任何帮助,请举例说明。


首先看一下这个图表:

from

您可以正确地说"obj有一个名为my_method()的方法",这意味着您可以调用obj.my_method()。相比之下,您不应该说"MyClass有一个名为my_method()的方法",这会令人困惑,因为这意味着您可以像调用类方法一样调用myClass.my_method()。

要消除这种歧义,您应该说my_method()是myclass的一个实例方法(而不仅仅是"一个方法"),这意味着它是在myclass中定义的,您实际上需要myclass的一个实例来调用它。它是同一个方法,但是当你谈论这个类时,你称它为实例方法,当你谈论这个对象时,你仅仅称它为一个方法。记住这一区别,在编写这样的自省代码时,您不会感到困惑:

1
String.instance_methods =="abc".methods # => true String.methods =="abc".methods # => false

对象的实例变量活在对象本身中,对象的方法活在对象的类中。这就是同一类的对象共享方法但不共享实例变量的原因。


I am confused between class methods, instance methods,

Ruby中没有"类方法"这样的东西。只有一种方法:实例方法。

Ruby有时会提到"类方法",但这只是一个方便的名称,我们用来指"Class类实例的单例类的实例方法"。这是相当多的一口,所以我们将它缩写为"类方法",但我们完全清楚类方法在Ruby语言中不存在。

instance variables, and class variables.

实际上,区别就相当于它在tin上所说的:实例变量属于对象(即实例),而类变量属于类。实际上,类变量的范围相当广泛:类变量在它定义的类中是可见的,它的所有实例、它的所有子类、它的所有子类实例、它的所有子类的所有子类实例、它的所有子类的所有子类实例等等。基本上,类变量在整个类子层次结构以及所有直接和间接实例中都是可见的。

注意,类和其他类一样,也是对象(Class类的实例)。这意味着它们也可以有实例变量,就像所有其他对象一样。99%的时候,当你认为你想要一个类变量时,你实际上想要一个类的实例变量。