Oop 在Smalltalk中获取消息的发件人

Oop 在Smalltalk中获取消息的发件人,oop,smalltalk,squeak,Oop,Smalltalk,Squeak,在Smalltalk中,是否有一种实用的方法来获取消息的发送者,而无需手动将self作为参数传递 更具体地说:我想给传递给我的类的ID添加一个特定于类的前缀,因此如果ClassA发送(在类端) ClassB应该在内部将“myId”视为“ClassB myId”或类似的东西 我已经用一个额外的参数实现了它,这个参数必须是self ClassB doSomethingWith: 'myId' for: self. 但如果没有这种明确的自我发送,我会非常高兴。您可以使用执行堆栈上的反射功能: thi

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

更具体地说:我想给传递给我的类的ID添加一个特定于类的前缀,因此如果ClassA发送(在类端)

ClassB应该在内部将“myId”视为“ClassB myId”或类似的东西

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

ClassB doSomethingWith: 'myId' for: self.

但如果没有这种明确的自我发送,我会非常高兴。您可以使用执行堆栈上的反射功能:

thisContext发送方-接收方

  • thisContext
    回答当前堆栈帧
  • sender
    回答父堆栈帧
  • receiver
    回答堆栈帧的接收器

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

    您可以使用执行堆栈上的反射功能:

    thisContext发送方-接收方

  • thisContext
    回答当前堆栈帧
  • sender
    回答父堆栈帧
  • receiver
    回答堆栈帧的接收器

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

    我不明白您想要什么;ClassB知道它的名字,所以它可以在符号前加上前缀…ClassA不必在意ClassB使用每个类的名称空间;ClassB知道它的名称,所以它可以在符号前加上它的前缀…ClassA不必关心ClassB是否使用每个类的名称空间。
    ClassB doSomethingWith: 'myId' for: self.