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