ruby语言的Class Variables

[复制链接]
查看11 | 回复0 | 2006-8-16 22:00:00 | 显示全部楼层 |阅读模式
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

def 属性名字=(a)
属性=a
end

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

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行