difference between class method , instance method , instance variable , class variable?
我最近开始学习Ruby。我对类方法、实例方法、实例变量和类变量感到困惑。我在谷歌上搜索了很多,但没有得到任何澄清。如有任何帮助,请举例说明。
首先看一下这个图表:
您可以正确地说"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有时会提到"类方法",但这只是一个方便的名称,我们用来指"
instance variables, and class variables.
实际上,区别就相当于它在tin上所说的:实例变量属于对象(即实例),而类变量属于类。实际上,类变量的范围相当广泛:类变量在它定义的类中是可见的,它的所有实例、它的所有子类、它的所有子类实例、它的所有子类的所有子类实例、它的所有子类的所有子类实例等等。基本上,类变量在整个类子层次结构以及所有直接和间接实例中都是可见的。
注意,类和其他类一样,也是对象(