如何在Mathematica中的模块中获取调用函数的名称?

时间:2009-09-12 13:20:41

标签: debugging wolfram-mathematica

如果我编写一个调用另一个模块的函数或模块,我怎样才能得到调用函数/模块的名称?这有助于调试目的。

1 个答案:

答案 0 :(得分:4)

Stack function几乎完全符合您的要求,给出了调用堆栈中“标记”(出于您的目的,读取“函数”)的列表。它不是防弹的,因为存在其他函数,如StackBeginStackInhibit,但这些函数在开始时非常具有异国情调。

在大多数情况下,Stack将返回命名要评估的函数的符号。要弄清楚这些符号来自哪个上下文,你可以使用Context function,尽可能接近aboput来确定它们所属的包。但是,这需要一些小心,因为符号可以动态地添加到包中(通过GetImportToExpressionSymbol),并且可以重新定义或修改它们(使用例如,在其他包中也有新的评估规则。