Class variables:用于描述属于class 的 states,而非属于某个object的states
1.表现形式 @@var
2.属于特定的class而不是object
3.在使用前,必须初始化
class Song
@@plays = 0
def initialize(name, artist, duration)
@name= name
@artist= artist
@duration = duration
@plays= 0
end
def play
@plays += 1# same as @plays = @plays + 1
@@plays += 1
"This song: #@plays plays. Total #@@plays plays."
end
end
*class variable是一种介于instance variables 和 global variables 间的一种variable,它在某些用途上,能够达到global variables的意图,又能避免global variables的副作用
4.class variables 和 instance variables一样如果要被外部访问,必须建立方法,注意不可以使用这样的方法建立:
class Song
@@test=1
attr_reader :test
#不支持accessor method
end
song = Song.new
print song.test
结果:
nil
使用下面的方式(请记住,下面的方法,test和test=不是attributes!,attributes仅仅是那些可以访问的instance variables的方法):
class Song
@@test=1
#attr_reader :test
def test
#定义一个普通的方法
@@test
end
def test=(t)
#定义一个普通的方法
@@test=t
end
end
song = Song.new
print song.test
结果
1
其实除了上面的方式,还可以使用class methods,后面会提到
在用法上总结一下,所有属性都可以定义一组方法:
def 属性名字
属性
end