如果我编写一个调用另一个模块的函数或模块,我怎样才能得到调用函数/模块的名称?这有助于调试目的。
答案 0 :(得分:4)
Stack
function几乎完全符合您的要求,给出了调用堆栈中“标记”(出于您的目的,读取“函数”)的列表。它不是防弹的,因为存在其他函数,如StackBegin
和StackInhibit
,但这些函数在开始时非常具有异国情调。
在大多数情况下,Stack
将返回命名要评估的函数的符号。要弄清楚这些符号来自哪个上下文,你可以使用Context
function,尽可能接近aboput来确定它们所属的包。但是,这需要一些小心,因为符号可以动态地添加到包中(通过Get
,Import
,ToExpression
或Symbol
),并且可以重新定义或修改它们(使用例如,在其他包中也有新的评估规则。