在不使用 if-test 或 is-a 测试进行类型检查的情况下,这如何在 smalltalk 中完成?
例如 :
function Add( x, y : Integer ) : Integer;
begin
Add := x + y
end;
function Add( s, t : String ) : String;
begin
Add := Concat( s, t )
end;
在不使用 if-test 或 is-a 测试进行类型检查的情况下,这如何在 smalltalk 中完成?
例如 :
function Add( x, y : Integer ) : Integer;
begin
Add := x + y
end;
function Add( s, t : String ) : String;
begin
Add := Concat( s, t )
end;
Smalltalk 没有您的示例中的全局方法。要实现您的示例,您可以将该方法添加#add:
到两个类Integer
并String
作为类扩展:
Integer>>add: anInteger
^ self + anInteger
String>>add: aString
^ self , aString
然后你可以编写如下代码:
1 add: 2. " -> 3 "
'foo' add: 'bar'. " -> 'foobar' "
不需要 if 测试,因为根据方法的接收者调用正确的方法add:
。
您可以实现Double Disptach:
String>>add: other
^ self, other adaptToString
String>>adaptToString
^ self
Number>>adaptToString
^ self asString
Number>>add: other
^ self + other adaptToInteger
... and so on