Ruby Class里的变量

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 self.属性名称
end

在用法上总结一下,所有属性都可以定义一组方法:

def 属性名字

属性

end



def 属性名字=(a)

属性=a

end



来实现属性的存取,对于instance variables,我们可以使用更好的方法:

attr_reader :属性名 , :属性名

attr_writer :属性名 , :属性名



attr_accessor 一举两得: 同时兼备 attr_reader attr_writer 的作用。
attr 只能带一个符号参数, 第二个参数是一个 bool 参数,用于指示是否为头一个符号参数产生写方法。它的默认值是 false , 不产生写方法。

你可能感兴趣的:(Ruby)