2013-08-10 9 views
5

Uczę się pisku i zastanawiałem się, czy istnieje sposób "przechowywania" wiadomości do wysłania do obiektu.Delegowanie Smalltalk/przechowywanie selektorów wiadomości

Na przykład chciałbym być w stanie wykonać następujące czynności:

Delegator>>performWith: arg 
    |target method| 
    target := MyObject new. 
    method := #myMethod. "Not sure what goes here" 
    target sendMessage: method withArgs: arg. "Or how this call would work" 

Alternatywnym rozwiązaniem byłoby określić zarówno cel i metody w bloku. Jednak możliwe jest korzystanie z powyższego podejścia?

Odpowiedz

4

No, może źle zrozumiałem pytanie, ale prawie odgadł odpowiedź: wysłać tę wiadomość do "target":

wykonania: aSymbol z: jakisObiekt

czyli

wykonać: aSymbol withArguments: anArrayOfArguments

W przykładzie:

cel wykonać: metoda z: arg

+0

Ahh Nie byłem świadomy komunikatu o wykonaniu. Dzięki – ahjmorton

4

Można również spróbować użyć instancji obiektu MessageSend.

msg := MessageSend receiver: target selector: #myMethod arguments: #(arg1 arg2). 
msg value. "sends the message to it's receiver" 

MessageSend można używać w niezmienionej postaci. Squeak, Pharo itp. Używają MessageSend jako klasy bazowej dla MorphicAlarm - której można użyć do opóźnienia wykonania wiadomości do pewnego czasu w przyszłości.

Szczęśliwe kodowanie!

Powiązane problemy