04/28/2010 类,对象,变量
表示歌曲的Ruby類,歌曲(名字,演唱者,時長)
?
在Ruby程序中,initialize是一個特殊的方法。
當調(diào)用Song.new創(chuàng)建一個新的Song對象時,Ruby首先分配一些內(nèi)存來保存未初始化的對象,然后調(diào)用對象的initialize方法,并把調(diào)用new時所使用的參數(shù)傳入該方法。
?
每個對象都表示自己對應的歌曲,因此需要每個Song對象帶有自己的歌曲名,演唱者和時長,所以需要將這些值作為實例變量保存在對象中。
?
對象內(nèi)的所有方法都可以訪問實例變量,每個對象都有實例變量的一份拷貝。
?
class Song
? def initialize(name, artist, duration)??????????? #接收3個參數(shù),參數(shù)以小寫字母開頭
? @name????? = name????????????????????????????????? #實例變量由@符開頭的名字,參數(shù)name被賦值給實例變量@name
? @artist????? = artist?????????????????????????
? @duration? = duration
? end
end
song = Song.new(“l(fā)ove”, "nikey”, 250)
song.inspect???????????????? -->#<Song:0x3067054 @artist="nikey", @duration=250, @name="love">
?
inspect方法:可以發(fā)送給任何對象,默認將對象的ID和實例變量格式化。
標準消息to_s: 可以發(fā)送給任何一個想要輸出字符串表示的對象。
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???????????????????????????????????????????????????????????????? -- 結(jié)果:Song: love -- nikey (250)
在Ruby中,類永遠都不是封閉的,總可以向一個已有的類中添加方法。適用于自己編寫的類,同樣適用于標準的內(nèi)建類。
轉(zhuǎn)載于:https://www.cnblogs.com/nikeylee/articles/1722745.html
總結(jié)
以上是生活随笔為你收集整理的04/28/2010 类,对象,变量的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: YAML文件解析
- 下一篇: Docker:集装箱式“运输”在软件上的