2013-01-11 60 views
1

這是如何在沒有使用if-test的情況下在smalltalk中完成的或者是否是用於類型檢查的測試?smalltalk中的ad hoc多態性

例如:

function Add(x, y : Integer) : Integer; 
begin 
    Add := x + y 
end; 

function Add(s, t : String) : String; 
begin 
    Add := Concat(s, t) 
end; 

回答

12

Smalltalk中沒有全局方法,如在你的榜樣。要實現你的榜樣,你會的方法#add:添加到這兩個類IntegerString作爲類擴展:

Integer>>add: anInteger 
^self + anInteger 

String>>add: aString 
^self , aString 

然後,你可以寫代碼,如:

1 add: 2.     " -> 3 " 
'foo' add: 'bar'.   " -> 'foobar' " 

沒有必要的,如果測試,因爲根據方法add:的接收器調用正確的方法。

3

您可以實現一個Double Disptach

String>>add: other 
    ^self, other adaptToString 

String>>adaptToString 
    ^self 

Number>>adaptToString 
    ^self asString 

Number>>add: other 
    ^self + other adaptToInteger 

... and so on