<分区>
Possible Duplicate:
Difference between class variables and class instance variables?
在阅读 Ruby 书籍时,我似乎错过了变量章节。现在我似乎无法理解以下内容:
- 什么是实例变量?
- 什么是类实例变量?
变量
、@instance_var
和@class_instance_var
之间有什么区别?
我试着看了不同博客的一些帖子,还是没看懂。任何帮助将不胜感激。
<分区>
Possible Duplicate:
Difference between class variables and class instance variables?
在阅读 Ruby 书籍时,我似乎错过了变量章节。现在我似乎无法理解以下内容:
变量
、@instance_var
和@class_instance_var
之间有什么区别?我试着看了不同博客的一些帖子,还是没看懂。任何帮助将不胜感激。
最佳答案
What is an instance variable?
它是一个变量,具有与该类实例相关的独立值。例如,Person
类可以将 @name
和 @age
作为实例变量。 Person
的所有实例都有姓名和年龄,但每个实例对这些事物都有不同的值。
What is a class instance variable?
这有点奇怪,但您必须意识到 Person
类本身是 Class
的一个实例。所以它也可以有实例变量。这通常用于配置类。就像将 API key 添加到类中,以便可以使用该数据创建所有实例。
class PersonFetcher
# class method can set class instance variables
def self.set_api_key(key)
@api_key = key
end
# instance method sets instance variables
def set_name(name)
@name = name
end
end
What is the difference between a variable, @instance_var and @class_instance_var?
它是如何持续存在的。
变量
是本地的。它只是对对象的引用。一旦没有代码或对象引用这个值,它就会通过垃圾收集被销毁。只有您继续使用它,它才会持续存在。
@instance_var
在一个实例上持续存在。只要实例存在,它所拥有的实例变量也会存在。只要 Person
实例存在,该实例就会有一个 @name
。
@class_instance_var
保留在类对象上(记住它是 Class
的一个实例)。因此它将永远存在于类对象中,因为您永远无法真正摆脱已声明的类。
关于ruby - 局部变量、实例变量和类变量有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14127805/