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

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

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