从Module对象到声明它的文件的路径的正确方法是什么?准确地说,我正在寻找关键字module出现的文件。
间接方法是在每个模块中找到自动定义的eval方法的位置。moduleloc(mm::Module) = first(functionloc(mm.eval, (Symbol,)))
例如
moduleloc(mm::Module) = first(functionloc(mm.eval, (Symbol,)))
using DataStructures
moduleloc(DataStructures)产出:
/home/oxinabox/.julia/v0.6/DataStructures/src/DataStructures.jl这种间接的方法很有效,但感觉有点杂乱无章。我是不是错过了一些内置的功能来完成这个任务?
我会提醒您,模块与包不是一回事。考虑子模块的存在,甚至是通过include加载包目录或加载路径之外的渐开线路径来加载的模块。
发布于 2017-11-08 20:36:00
模块根本不存储文件的位置,它们是在哪里定义的。您可以在它们在C中的定义中看到这一点。你唯一的希望就是看看它们所承载的束缚。
方法,另一方面,要存储它们的文件位置。eval是在每个module (虽然不是baremodules)中定义的函数。更正确的做法可能是:
moduleloc(mm::Module) = first(functionloc(mm.eval, (Any,)))因为这更精确地反映了自动定义的eval方法。
发布于 2017-11-08 07:29:04
如果您不是在寻找一种编程的方法,您可以使用methods函数。
using DataFrames
locations = methods(DataFrames.readtable).ms它适用于所有方法,但要找到正确的方法并不难,除非您有大量的方法,而这些方法仅在很小的程度上有所不同。
https://stackoverflow.com/questions/47172777
复制相似问题