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 , 不产生写方法。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值