04/28/2010 类,对象,变量

表示歌曲的Ruby类,歌曲(名字,演唱者,时长)

 

在Ruby程序中,initialize是一个特殊的方法。

当调用Song.new创建一个新的Song对象时,Ruby首先分配一些内存来保存未初始化的对象,然后调用对象的initialize方法,并把调用new时所使用的参数传入该方法。

 

每个对象都表示自己对应的歌曲,因此需要每个Song对象带有自己的歌曲名,演唱者和时长,所以需要将这些值作为实例变量保存在对象中。

 

对象内的所有方法都可以访问实例变量,每个对象都有实例变量的一份拷贝。

 

class Song

  def initialize(name, artist, duration)            #接收3个参数,参数以小写字母开头

  @name      = name                                  #实例变量由@符开头的名字,参数name被赋值给实例变量@name

  @artist      = artist                         

  @duration  = duration

  end

end

song = Song.new(“love”, "nikey”, 250)

song.inspect                 -->#<Song:0x3067054 @artist="nikey", @duration=250, @name="love">

 

inspect方法:可以发送给任何对象,默认将对象的ID和实例变量格式化。

标准消息to_s: 可以发送给任何一个想要输出字符串表示的对象。

song = Song.new("love", "nikey", 250)

puts song.to_s            --> #<Song:0x326705c>,只报告了对象的ID

 

Override Song类中的to_s方法:

class Song

  def initialize(name, artist, duration)

  @name     = name

  @artist     = artist

  @duration = duration

  end

 

  def to_s

    "Song: #@name -- #@artist (#@duration)"                     -- 使用#字符将3个实例变量的值插入到字符串中。

  end

end

song = Song.new("love", "nikey", 250)
puts song.to_s                                                                 -- 结果:Song: love -- nikey (250)

在Ruby中,类永远都不是封闭的,总可以向一个已有的类中添加方法。适用于自己编写的类,同样适用于标准的内建类。

posted @ 2010-04-28 10:40  NikeyL  阅读(201)  评论(0编辑  收藏  举报