動態語言之所以“動態”,最明顯的特徵就是:類執行個體的行為/屬性可以在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)