因此,我正在編寫一個應用程序,其中一個對象有一堆將它轉發郵件的委託對象。這個想法是,我可以說Smalltalk中的郵件轉發
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].
它的工作原理,但必須有更好的方法。這個解決方案將參數限制爲字符串,並且很簡單。有沒有人知道更清潔,更好的方式來轉發消息?
順便說一句,我使用的吱吱聲,而是一個實現獨立的解決方案會者優先;)
編輯:我要補充的是,代表是同一類的對象,這樣我就可以」只是重寫DoesNotUnderstand :.
感謝您的建議,但對象與代表屬於同一類型,所以我無法做到這一點。我將其添加到原始問題中。 – Alex 2009-05-19 19:09:47
也許你可以爲這個委託集合創建一個新類,然後使用doesNotUnderstand?如果不進行更明確的消息創建,它可能是最直接的方式。 – 2009-05-19 20:18:15