给定一个函数对象f
,我该如何找到:
在Julia 0.4中,我能够使用f.env.name
找到名字,但没有关于模块的提示。对Julia 0.5来说,我找不到两个中的任何一个。
答案 0 :(得分:6)
如果您想要字符串
,名称很简单:ajax
或Symbol(f)
正如您所知,模块是每种方法(即每种类型的签名)。
string(f)
返回一个方法表,根据文件打印出所有方法及其位置。
您可以执行methods(f)
来获取模块
所以使用一个例子[meth.module for meth in methods(f)]
函数。
collect
答案 1 :(得分:4)
@ oxinabox的回答是正确的。要添加,typeof(f).name.mt.name
是f.env.name
的v0.5替代品。这对于避免将.
应用于非stdlib模块中引入的函数时发生的string
非常有用。还存在Base.function_name(f)
,当Julia版本发生变化时,它可能不太可能中断。
为了获得引入函数(类型)的模块,而不是单个方法的模块,有typeof(f).name.module
或可能更好的版本Base.function_module(f)
。方法表的模块可能是相同的;可以通过typeof(f).name.mt.module
获得。
请注意,v0.4中的f.env
直接等同于typeof(f).name.mt
,因此在v0.4上同样适用f.env.name
和f.env.module
。
答案 2 :(得分:1)
答案 3 :(得分:0)
答案不完全相关但密切相关:您可以使用f
找到functionloc(f)
的文件名和行号