Ruby的Duck Typing有點類似物件導向的多型,但差別在於多型要透過繼承才能實現,Duck Typing則不用。至於什麼是Duck Typing,可以用一句話來講:「如果牠走路像鴨子,叫聲也像鴨子,那牠就是隻鴨子!」。

以往程式要物件做什麼時,都會先檢查型別,例如下面的程式碼(C#):

2009-04-09_024800

2009-04-09_024820

 

當呼叫Test這個函式時,一定得檢查引數p是否為Parent或其衍生類別,但是在Ruby中,變數是沒有型別的,丟進來的到底是什麼也不知道。現在用Ruby寫一段類似的程式碼:

2009-04-09_025541

上面的程式碼中,宣告了三個類別,其中TestClass跟TestClass2都有相同的函式叫test,但是這兩個類別並沒有繼承的關係。而TestContainer裡面的classtest就是用來測試這兩個類別,測試的程式碼如下:

2009-04-09_025747

執行之後會分別印出test跟test2,在執行container.classtest時,直譯器不檢查型別,只管有沒有一個叫test的函式,有的話就執行它。

以上就是Ruby的Duck Typing,Ruby是一個非常有趣的語言,身為程式設計師,不玩玩這類直譯式語言就太可惜了!

arrow
arrow
    全站熱搜

    卑微研究生 發表在 痞客邦 留言(0) 人氣()