ruby學習筆記(4)-動態修改類的屬性

來源:互聯網
上載者:User

動態語言之所以“動態”,最明顯的特徵就是:類執行個體的行為/屬性可以在new出後,動態修改!個人覺得這種處理相對java/c#(靜態語言)來說,更符合現實世界。

比如:一個人剛出生時,除了哭、吃奶等這些基本原始本能,其它的幾乎全都不會(原始本能可理解類定義中最開始定義的屬性和方法),但隨著時間推移,學會了看書,走路,說話...(相當於新增了方法/屬性),再往後的人生誰也無法預料,一切都是未知的,所以不太可能象靜態語言那樣,在運行前就事先把所有的屬性/方法全寫齊,甚至一個人後來失憶,把原先學會的東西給忘記了也沒準(比如突然不會說話了,相當於把執行個體的方法/屬性給動態刪除),後來醫治好以後,又能說話了(重新添加某種方法)。

當然我的意思也並非靜態語言不好,只能說各有各的特點,最後來一段代碼吧:

class Persondef cryputs "哇..."enddef eatputs "吃奶中,請勿打擾..."enddef showbodyputs "裸奔一下,展示自己的身體" #這個方法寫得比較齷齪  endendaPerson = Person.new #創造了一個新生兒aPerson.cry #剛出生,當然要哭幾下aPerson.eat #哭累了,就吃aPerson.showbody #小孩子嘛,隨便給看一下小JJ無所謂啦class Persondef readputs "學會了看書"enddef walkputs "學會了走路"endendaPerson.walkaPerson.readclass Personundef read #後來因為某種原因,突然不會讀書了,也許得了什麼怪病吧:)end#aPerson.read #這裡將報錯"undefined method `read' for #<Person:0x39162f0> (NoMethodError)"class Personprivate:showbody #長大了以後,當然就不能隨便給陌生人看自己的身體了  end#aPerson.showbody #將報錯:private method `showbody' called for #<Person:0x35d5f70> (NoMethodError)
相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.