因此,我正在编写一个应用程序,其中一个对象有一堆将它转发邮件的委托对象。这个想法是,我可以说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