Получить отправителя сообщения в Smalltalk - PullRequest
1 голос
/ 08 января 2010

Есть ли практический способ получить отправителя сообщения в Smalltalk без ручной передачи себя в качестве параметра?

Если говорить более конкретно: я хочу добавить префикс, специфичный для класса, к идентификатору, который передается моему классу, поэтому, если ClassA отправляет (на стороне класса)

ClassB doSomethingWith: 'myId'.

ClassB должен внутренне обрабатывать 'myId' как 'ClassB-myId' или что-то подобное.

Я реализовал это с помощью дополнительного параметра, который должен быть self

ClassB doSomethingWith: 'myId' for: self.

но я был бы очень рад, если бы было решение без этой явной отправки себя.

1 Ответ

6 голосов
/ 08 января 2010

Вы можете использовать отражающие средства в стеке выполнения:

thisContext sender receiver

  1. thisContext отвечает на текущий кадр стека
  2. sender отвечает рамке родительского стека
  3. receiver отвечает получателю стека фрейма

Это должно работать в Pharo, VisualWorks и GemStone. Другие Smalltalk могут использовать другие имена методов.

...