2010-01-08 7 views
1

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

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

ClassB doSomethingWith: 'myId'. 

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

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

ClassB doSomethingWith: 'myId' for: self. 

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

+0

Я не понимаю, чего вы хотите; ClassB знает свое имя, поэтому он может добавить его к символу ... –

+0

ClassA shoudln't должен заботиться о том, что классB использует пространства имен для каждого класса. – Leo

ответ

6

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

thisContext sender receiver

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

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

+0

Работает также в Squeak, спасибо большое :) – Leo

Смежные вопросы