ruby系列教材(14):Class Variables

上一篇 / 下一篇  2008-02-02 15:02:15 / 个人分类:Ruby

Class variables:用于描述属于class 的 states,而非属于某个object的states

1.表现形式 @@var

2.属于特定的class而不是object

3.在使用前,必须初始化

 

classSong

  @@plays = 0

  def initialize(name, artist, duration)

    @name=name

    @artist=artist

    @duration =duration

    @plays= 0

  end

  defplay

    @plays += 1# same as @plays = @plays +1

    @@plays += 1

    "This song:#@playsplays. Total#@@playsplays."

  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 :属性名 , :属性名


TAG: Ruby

 

评分:0

我来说两句

我的栏目

日历

« 2024-05-08  
   1234
567891011
12131415161718
19202122232425
262728293031 

数据统计

  • 访问量: 22903
  • 日志数: 47
  • 建立时间: 2008-01-29
  • 更新时间: 2008-02-02

RSS订阅

Open Toolbar