Как я могу получить имя вызывающей функции в модуле в Mathematica? - PullRequest
5 голосов
/ 12 сентября 2009

Если я напишу функцию или модуль, который вызывает другой модуль, как я могу получить имя вызывающей функции / модуля? Это было бы полезно для целей отладки.

1 Ответ

4 голосов
/ 14 сентября 2009

Функция Stack сделает почти то, что вы хотите, предоставив список «тегов» (для ваших целей прочитайте «функции»), которые находятся в стеке вызовов. Это не пуленепробиваемый, потому что существуют другие функции, такие как StackBegin и StackInhibit, но они очень экзотичны с самого начала.

В большинстве случаев Stack возвращает символы, которые обозначают функции, которые оцениваются. Чтобы выяснить, из какого контекста эти символы, вы можете использовать функцию Context , которая настолько близка, насколько вы можете выяснить, к какому пакету они относятся. Это требует некоторой осторожности, поскольку символы могут быть добавлены в пакеты динамически (через Get, Import, ToExpression или Symbol), и их можно переопределить или изменить (например, с помощью новых правил оценки) в другие пакеты также.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...