Как мне обратиться к свойству name локального метода в коде? - PullRequest
1 голос
/ 10 августа 2011

У меня есть свойство объекта кэша, которое я хотел бы установить для текущего класса и метода в имени контекста, чтобы отследить, какие методы / классы генерируют наибольшую частоту этих объектов.

Я могу легко получить имя текущего класса, используя приведенный ниже код, но я изо всех сил пытаюсь найти аналогичный метод для получения имени текущего метода из документации.когда рассматриваемый метод настроен как генератор объектов, но я бы не стал идти по этому пути. Должен быть простой способ ссылки на имя метода, верно?

///I'd rather not do this to my methods if I don't have to.
Method MyMethod() [ CodeMode = objectgenerator ]

Ответы [ 3 ]

2 голосов
/ 17 февраля 2012

Для этого есть макрос: $$$ CurrentMethod, определенный в% occIO.inc, который вы найдете в% SYS, поэтому вам не нужно включать его для использования. Здесь также определяется $$$ CurrentClass.

1 голос
/ 13 августа 2011

Для подобных вещей мне нравится использовать классы% Projection. Вы можете посмотреть документацию о том, как это сделать, но основная идея заключается в том, что когда вы компилируете один класс, он может быть настроен для генерации другого.

Если вы хотите расширить то, что дает вам Intersystem, такими вещами, как знание того, в каком методе вы находитесь (сам Intersystem просто обманывает и изменяет компилятор классов, не создавая общий метод, который может использовать каждый), вы можете сделать что-то вроде взлома, например, иметь параметр класса #CurrentMethod и настройка класса проекции для его замены фактическим именем метода при сохранении.

Это очень сложно настроить, но как только вы это сделаете, вы сможете по мере необходимости добавлять дополнительные функции мета-класса. Я делаю это для тех же целей, о которых вы упоминали, и для генерации строго типизированных объектов результирующего набора с помощью некоторых удобных методов.

Вы также можете сделать то же самое в коде, вызываемом из надстройки Cache Studio. В зависимости от того, как вы пишете свою надстройку, вы можете, например, запустить свой код из пункта меню.

1 голос
/ 11 августа 2011

Не существует "официального" способа сделать это в методе.

Вы можете использовать выражение $stack($stack,"PLACE"), чтобы определить позицию исполняемого кода в данный момент.Этого должно быть достаточно для отладки.Вы можете извлечь имя метода из него, если вам действительно нужно.Я бы не советовал использовать это в рабочем коде =)

...