【问题标题】:Get sender of a message in Smalltalk在 Smalltalk 中获取消息的发件人
【发布时间】:2010-01-08 14:33:39
【问题描述】:

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

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

ClassB doSomethingWith: 'myId'.

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

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

ClassB doSomethingWith: 'myId' for: self.

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

【问题讨论】:

  • 我不明白你想要什么; ClassB 知道它的名称,因此它可以将其添加到符号前……
  • ClassA 不必关心 classB 使用每个类的命名空间。

标签: oop smalltalk squeak


【解决方案1】:

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

thisContext sender receiver

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-10-27
    • 1970-01-01
    • 1970-01-01
    • 2019-02-03
    • 1970-01-01
    • 2021-04-20
    • 2012-03-30
    相关资源
    最近更新 更多