1

有没有一种实用的方法可以在 Smalltalk 中获取消息的发送者,而无需手动将 self作为参数传递?

更具体地说:我想向传递给我的班级的 ID 添加一个班级特定的前缀,所以如果 ClassA 发送(在班级方面)

ClassB doSomethingWith: 'myId'.

ClassB 应该在内部将 'myId' 视为 'ClassB-myId' 或类似的东西。

我已经用一个额外的参数实现了这个,它必须是 self

ClassB doSomethingWith: 'myId' for: self.

但是如果有一个没有这种明确的自我发送的解决方案,我会很高兴。

4

1 回答 1

6

您可以在执行堆栈上使用反射设施:

thisContext sender receiver

  1. thisContext回答当前堆栈帧
  2. sender回答父堆栈帧
  3. receiver回答堆栈帧的接收者

这应该适用于 Pharo、VisualWorks 和 GemStone。其他 Smalltalk 可能使用不同的方法名称。

于 2010-01-08T15:06:24.933 回答