class 方法、实例方法、实例变量、class 变量之间的区别?
difference between class method , instance method , instance variable , class variable?
我最近开始学习ruby。我对 class 方法、实例方法、实例变量和 class 变量感到困惑。我在谷歌上搜索了很多,但没有得到任何澄清。任何帮助以及示例将不胜感激。
先看看这张图:
你可以正确地说“obj 有 一个方法 叫做 my_method( )”,这意味着你是能够调用 obj.my_method()。相反,你不应该说“MyClass 有一个名为 my_method() 的方法。”这会令人困惑,因为这意味着您可以调用 MyClass.my_method() 就好像它是 class 方法一样。
为了消除歧义,你应该说 my_method() 是 MyClass 的一个 实例方法(不仅仅是“一个方法”),意思是它被定义了在 MyClass 中,你实际上需要一个 MyClass 的实例来调用它。同样是方法,但是当你谈论 class 时,你称它为实例方法,而当你谈论对象时,你只是称它为方法。记住这个区别,写这样的内省代码就不会糊涂了:
String.instance_methods == "abc".methods # => true String.methods == "abc".methods # => false
对象的实例变量存在于对象本身中,对象的方法存在于对象的 class 中。这就是为什么相同 class 的对象共享方法但不共享实例变量的原因。
I am confused between class methods, instance methods,
Ruby 中没有 "class method" 这样的东西。只有一种方法:实例方法。
Ruby 支持者有时会 谈论 关于 "class methods",但这只是我们用来指代 "instance methods of the singleton class of an instance of the Class
class" 的方便名称。这太啰嗦了,所以我们将其缩写为 "class methods",但我们非常清楚 Ruby 语言中不存在 class 方法。
instance variables, and class variables.
真的,区别几乎就是它在罐头上所说的:实例变量属于对象(又名实例),而 class 变量属于 classes。实际上,class 变量的范围很广:class 变量在定义它的 class 中可见,它的所有实例,它的所有子 classes,其子classes的所有实例,其所有子classes的子classes,其所有子classes的子[=28=的所有实例]es等等等等。基本上,class 变量在整个 class 子层次结构以及所有直接和间接实例中都是可见的。
请注意,classes 与其他对象一样是对象,它们也是实例(属于 Class
class)。这意味着它们也可以有实例变量,就像所有其他对象一样。 99% 的时间,当你认为你想要一个 class 变量时,你实际上想要一个 class.
的实例变量
我最近开始学习ruby。我对 class 方法、实例方法、实例变量和 class 变量感到困惑。我在谷歌上搜索了很多,但没有得到任何澄清。任何帮助以及示例将不胜感激。
先看看这张图:
你可以正确地说“obj 有 一个方法 叫做 my_method( )”,这意味着你是能够调用 obj.my_method()。相反,你不应该说“MyClass 有一个名为 my_method() 的方法。”这会令人困惑,因为这意味着您可以调用 MyClass.my_method() 就好像它是 class 方法一样。
为了消除歧义,你应该说 my_method() 是 MyClass 的一个 实例方法(不仅仅是“一个方法”),意思是它被定义了在 MyClass 中,你实际上需要一个 MyClass 的实例来调用它。同样是方法,但是当你谈论 class 时,你称它为实例方法,而当你谈论对象时,你只是称它为方法。记住这个区别,写这样的内省代码就不会糊涂了:
String.instance_methods == "abc".methods # => true String.methods == "abc".methods # => false
对象的实例变量存在于对象本身中,对象的方法存在于对象的 class 中。这就是为什么相同 class 的对象共享方法但不共享实例变量的原因。
I am confused between class methods, instance methods,
Ruby 中没有 "class method" 这样的东西。只有一种方法:实例方法。
Ruby 支持者有时会 谈论 关于 "class methods",但这只是我们用来指代 "instance methods of the singleton class of an instance of the Class
class" 的方便名称。这太啰嗦了,所以我们将其缩写为 "class methods",但我们非常清楚 Ruby 语言中不存在 class 方法。
instance variables, and class variables.
真的,区别几乎就是它在罐头上所说的:实例变量属于对象(又名实例),而 class 变量属于 classes。实际上,class 变量的范围很广:class 变量在定义它的 class 中可见,它的所有实例,它的所有子 classes,其子classes的所有实例,其所有子classes的子classes,其所有子classes的子[=28=的所有实例]es等等等等。基本上,class 变量在整个 class 子层次结构以及所有直接和间接实例中都是可见的。
请注意,classes 与其他对象一样是对象,它们也是实例(属于 Class
class)。这意味着它们也可以有实例变量,就像所有其他对象一样。 99% 的时间,当你认为你想要一个 class 变量时,你实际上想要一个 class.