Smalltalk委派/存储消息选择器



我正在学习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"

另一种方法是在块中指定目标和方法。然而,使用上述方法是可能的吗?

也许我误解了你的问题,但你几乎猜到了答案:将此消息发送到您的"目标":

执行:aSymbol with:anObject

或:

performance:aSymbolwithArguments:aArrayOfArguments

在您的示例中:

目标执行:方法带有:arg

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

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

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

编码快乐!

最新更新