给定一个函数对象,我如何找到它的名称和模块?

时间:2016-08-07 22:59:54

标签: julia

给定一个函数对象f,我该如何找到:

  1. 功能名称
  2. 模块(s)的方法?
  3. 在Julia 0.4中,我能够使用f.env.name找到名字,但没有关于模块的提示。对Julia 0.5来说,我找不到两个中的任何一个。

4 个答案:

答案 0 :(得分:6)

如果您想要字符串

,名称很简单:ajaxSymbol(f) 正如您所知,模块是每种方法(即每种类型的签名)。 string(f)返回一个方法表,根据文件打印出所有方法及其位置。

您可以执行methods(f)来获取模块

所以使用一个例子[meth.module for meth in methods(f)]函数。

collect

答案 1 :(得分:4)

@ oxinabox的回答是正确的。要添加,typeof(f).name.mt.namef.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.namef.env.module

答案 2 :(得分:1)

Julia 1.x中,命令为:

  1. Base.nameof
  2. Base.parentmodule

由于这两种方法都已导出,因此nameofparentmodule也可以工作。

答案 3 :(得分:0)

答案不完全相关但密切相关:您可以使用f找到functionloc(f)的文件名和行号