1

これは、タイプチェックのif-testまたはis-atestを使用せずにsmalltalkでどのように実行されますか?

例えば ​​:

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

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

2 に答える 2

12

Smalltalkには、例のようなグローバルメソッドはありません。例を実装するには、メソッド#add:を両方のクラスIntegerStringクラス拡張として追加します。

Integer>>add: anInteger
  ^ self + anInteger

String>>add: aString
  ^ self , aString

次に、次のようなコードを記述できます。

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

メソッドの受信者に応じて適切なメソッドが呼び出されるため、if-testは必要ありませんadd:

于 2013-01-11T10:18:03.397 に答える
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
于 2013-01-11T10:15:48.897 に答える