ruby_类的实例变量和对象的实例变量
ruby_类的实例变量和对象的实例变量
?
Ruby中,类除了类变量@@x、实例变量@x,还有一个类的实例变量@x的概念,而且类的实例变量和对象的实例变量可以重名。
类变量@@x
实例变量@x,供给对象使用
类的实例变量@x,供给类使用
?
怎么理解呢?
要理解Ruby的核心之一:类本身也是一个实例,比如下面例子的Test类,Test本身是Class类的一个对象。
这样也就可以理解,类这个实例也可以有方法,这与对象的实例方法是不同的。
?
看例子:
#NOTICE: 可以重名class Test @@y = 100 def getY @@y end def setY(y) @@y = y end def self.getY @@y end def self.setY(y) @@y = y end #object的实例变量 attr_accessor :cls_var #NOTICE: 可以重名 def initialize @cls_var = 0 end def increate @cls_var += 1 end #class的实例变量 class<<self attr_accessor :cls_var #NOTICE: 可以重名 end def self.increate @cls_var ||= 0 @cls_var += 1 endendputs Test.cls_varTest.increateputs Test.cls_varTest.increateputs Test.cls_varputs "----------------------------"t1 = Test.newputs t1.cls_vart1.increateputs t1.cls_varputs "----------------------------"puts t1.getYt1.setY(200)puts t1.getYputs "----------------------------"puts Test.getYTest.setY(300)puts Test.getYputs t1.getY?
输出:
nil
1
2
----------------------------
0
1
----------------------------
100
200
----------------------------
200
300
300
?
PP
PP
PP
--
PP
PP
PP
?
?
?
?
?
?