在Smalltalk中获取邮件的发件人

Leo*_*Leo 1 oop smalltalk squeak

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

更具体一点:我想为传递给我的类的ID添加一个特定于类的前缀,所以如果ClassA发送(在类侧)

ClassB doSomethingWith: 'myId'.
Run Code Online (Sandbox Code Playgroud)

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

我用一个必须是self的附加参数实现了这一点

ClassB doSomethingWith: 'myId' for: self.
Run Code Online (Sandbox Code Playgroud)

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

Luk*_*gli 6

您可以使用执行堆栈上的反射工具:

thisContext sender receiver

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

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