したがって、1つのオブジェクトに、メッセージの転送先となる一連のデリゲートオブジェクトがあるアプリケーションを作成しています。アイデアは私が言うことができるということです
someObject sendMessage:aMessage
そして、aMessageはsomeObjectのすべてのデリゲートに送信されます(aMessageの任意の値に対して)。私がこれを行うことができた唯一の方法は、次のようなものです。
sendMessage:aMessage
| sel chunks kwords arglist msg |
chunks := aMessage findTokens:' '.
kwords := Array new:(chunks size).
arglist := Array new:(chunks size).
1 to: (chunks size) do: [:i |
kwords at:i put:((chunks at:i) findTokens:':') at:1.
arglist at:i put:((chunks at:i) findTokens:':') at:2].
sel := ''.
kwords do:[:word | sel := sel,word,':'].
msg := Message selector:sel arguments:arglist.
delegates do:[:del | del perform:msg selector with:msg arguments].
それは機能しますが、より良い方法が必要です。このソリューションは、引数を文字列に制限し、単純に醜いです。誰かがメッセージを転送するためのよりクリーンでより良い方法を知っていますか?
ところで、私はsqueakを使用していますが、実装に依存しないソリューションが好まれます;)
編集:デリゲートはオブジェクトと同じクラスであるため、DoesNotUnderstand:をオーバーライドすることはできません。