【发布时间】:2010-10-27 10:16:33
【问题描述】:
所以我正在编写一个应用程序,其中一个对象有一堆将消息转发到的委托对象。这个想法是我可以说
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:.
【问题讨论】:
标签: oop smalltalk abstraction squeak