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中,类永远都不是封闭的,总可以向一个已有的类中添加方法。适用于自己编写的类,同样适用于标准的内建类。