5

我正在学习 Squeak,我想知道是否有办法“存储”要发送到对象的消息。

例如,我希望能够执行以下操作:

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"

另一种方法是在一个块中指定目标和方法。但是可以使用上述方法吗?

4

2 回答 2

4

好吧,也许我误解了您的问题,但您几乎猜到了答案:将此消息发送给您的“目标”:

执行:aSymbol 与:anObject

或者:

执行:aSymbol withArguments:anArrayOfArguments

在您的示例中:

目标执行:方法与:arg

于 2013-08-10T20:42:42.310 回答
4

您也可以尝试使用 MessageSend 对象的实例。

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

MessageSend 可以按原样使用。Squeak、Pharo 等使用 MessageSend 作为 MorphicAlarm 的基类 - 可以使用它来延迟消息的执行,直到未来的某个时间。

快乐编码!

于 2013-08-11T22:24:15.817 回答