Итак, я пишу приложение, в котором у одного объекта есть группа объектов-делегатов, которым он пересылает сообщения. Идея в том, что я могу сказать
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].
Это работает, но должен быть лучший способ. Это решение ограничивает аргументы быть строками и выглядит просто ужасно. Кто-нибудь знает более чистый и лучший способ пересылки сообщений?
Кстати, я использую писк, но было бы предпочтительным решение, не зависящее от реализации;)
EDIT : я должен добавить, что делегаты того же класса, что и объект, поэтому я не могу просто переопределить DoesNotUnderstand:.