在Smalltalk中获取邮件的发件人

时间:2010-01-08 14:33:40

标签: oop smalltalk squeak

是否有一种实用的方法可以在Smalltalk 中获取邮件的发件人,而无需手动将自我作为参数?

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

ClassB doSomethingWith: 'myId'.

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

我已经使用附加参数实现了这个参数必须是自我

ClassB doSomethingWith: 'myId' for: self.

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

1 个答案:

答案 0 :(得分:6)

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

thisContext sender receiver

  1. thisContext回答当前的堆栈框架
  2. sender回答父堆栈框架
  3. receiver回答堆栈框架的接收者
  4. 这应该适用于Pharo,VisualWorks和GemStone。其他Smalltalk可能使用不同的方法名称。