是否有一种实用的方法可以在Smalltalk 中获取邮件的发件人,而无需手动将自我作为参数?
更具体一点:我想为传递给我的类的ID添加一个特定于类的前缀,所以如果ClassA发送(在类侧)
ClassB doSomethingWith: 'myId'.
ClassB应该在内部将'myId'视为'ClassB-myId'或类似的东西。
我已经使用附加参数实现了这个参数必须是自我
ClassB doSomethingWith: 'myId' for: self.
但如果没有明确的自我发送解决方案,我会很高兴。
答案 0 :(得分:6)
您可以使用执行堆栈上的反射设施:
thisContext sender receiver
thisContext
回答当前的堆栈框架sender
回答父堆栈框架receiver
回答堆栈框架的接收者这应该适用于Pharo,VisualWorks和GemStone。其他Smalltalk可能使用不同的方法名称。