我正在學(xué)習(xí)編程,因此決定嘗試Ruby。我確定這是一個(gè)愚蠢的問(wèn)題,但是講師在談?wù)搒etter和getter方法,對(duì)此我感到困惑。這是示例:class Human def noise=(noise) @noise = noise end def noise @noise endend由此,該類(lèi)被實(shí)例化,我可以將其輸出:man = Human.newman.noise=("Howdie!")puts man.noise這導(dǎo)致 Howdie!現(xiàn)在讓我感到困惑的是,講師說(shuō)如果沒(méi)有g(shù)etter方法(這兩個(gè)方法中的第二個(gè)),就無(wú)法與實(shí)例變量@noise進(jìn)行交互。但是當(dāng)我刪除getter方法時(shí),我仍然可以訪問(wèn)@noise,請(qǐng)參見(jiàn)示例:class Human def noise=(noise) @noise = noise endendman = Human.newputs man.noise=("Howdie!")這與使用getter方法時(shí)的工作原理相同。所以現(xiàn)在我很困惑。為什么需要吸氣劑?如果沒(méi)有實(shí)例變量,教員意味著什么呢?他可能正在使用舊版本的Ruby嗎?在此先感謝您的幫助。
3 回答

牛魔王的故事
TA貢獻(xiàn)1830條經(jīng)驗(yàn) 獲得超3個(gè)贊
代碼行
puts man.noise=("Howdie!")
不使用getter方法,因此不需要定義getter方法即可工作。該行僅使用setter方法。setter方法的返回值自動(dòng)等于等號(hào)右側(cè)的值,因此“ Howdie!” 被傳給puts。
代碼行
puts man.noise
確實(shí)使用getter方法,如果刪除getter方法,它將無(wú)法正常工作。

婷婷同學(xué)_
TA貢獻(xiàn)1844條經(jīng)驗(yàn) 獲得超8個(gè)贊
當(dāng)然,它們都返回一個(gè)值,但是它們的行為是不同的。
假設(shè)已經(jīng)有一個(gè)成員@a
。
使用getter,@a
無(wú)需修改即可獲取的當(dāng)前值。
使用二傳手,可以修改@a
并獲取其新值作為返回值。
在考慮二傳手的行為時(shí),請(qǐng)注意:
@a的舊值無(wú)法使用setter獲取,并被覆蓋。
setter返回的內(nèi)容實(shí)際上是在調(diào)用setter之前就已經(jīng)知道的。
- 3 回答
- 0 關(guān)注
- 700 瀏覽
添加回答
舉報(bào)
0/150
提交
取消