有什么方法可以获取模块中定义的函数列表?
Any way to get a list of functions defined in a module?
是否有任何内省魔法可以给我一个模块中定义的函数列表?
module Foo
function foo()
"foo"
end
function bar()
"bar"
end
end
一些神话般的功能,如:
functions_in(Foo)
哪个 return:[foo,bar]
这里的问题是 names
和 whos
都列出了模块中的 exported 名称。如果你想看到它们,那么你需要做这样的事情:
module Foo
export foo, bar
function foo()
"foo"
end
function bar()
"bar"
end
end # module
此时 names
和 whos
都会列出所有内容。
如果您碰巧在 REPL 工作并且出于某种原因不想导出任何名称,您可以通过键入 Foo.[TAB]
以交互方式检查模块的内容。请参阅此 session:
中的示例
julia> module Foo
function foo()
"foo"
end
function bar()
"bar"
end
end
julia> using Foo
julia> whos(Foo)
Foo Module
julia> names(Foo)
1-element Array{Symbol,1}:
:Foo
julia> Foo.
bar eval foo
Tab 补全以某种方式查找 un-exported 名称,因此 必须 是让 Julia 告诉您的方法。我只是不知道那个功能是什么。
编辑
我做了一点挖掘。 un-exported 函数 Base.REPLCompletions.completions
似乎有效,正如我们之前使用的 REPL session 的延续所示:
julia> function functions_in(m::Module)
s = string(m)
out = Base.REPLCompletions.completions(s * ".", length(s)+1)
# every module has a function named `eval` that is not defined by
# the user. Let's filter that out
return filter(x-> x != "eval", out[1])
end
functions_in (generic function with 1 method)
julia> whos(Foo)
Foo Module
julia> names(Foo)
1-element Array{Symbol,1}:
:Foo
julia> functions_in(Foo)
2-element Array{UTF8String,1}:
"bar"
"foo"
是否有任何内省魔法可以给我一个模块中定义的函数列表?
module Foo
function foo()
"foo"
end
function bar()
"bar"
end
end
一些神话般的功能,如:
functions_in(Foo)
哪个 return:[foo,bar]
这里的问题是 names
和 whos
都列出了模块中的 exported 名称。如果你想看到它们,那么你需要做这样的事情:
module Foo
export foo, bar
function foo()
"foo"
end
function bar()
"bar"
end
end # module
此时 names
和 whos
都会列出所有内容。
如果您碰巧在 REPL 工作并且出于某种原因不想导出任何名称,您可以通过键入 Foo.[TAB]
以交互方式检查模块的内容。请参阅此 session:
julia> module Foo
function foo()
"foo"
end
function bar()
"bar"
end
end
julia> using Foo
julia> whos(Foo)
Foo Module
julia> names(Foo)
1-element Array{Symbol,1}:
:Foo
julia> Foo.
bar eval foo
Tab 补全以某种方式查找 un-exported 名称,因此 必须 是让 Julia 告诉您的方法。我只是不知道那个功能是什么。
编辑
我做了一点挖掘。 un-exported 函数 Base.REPLCompletions.completions
似乎有效,正如我们之前使用的 REPL session 的延续所示:
julia> function functions_in(m::Module)
s = string(m)
out = Base.REPLCompletions.completions(s * ".", length(s)+1)
# every module has a function named `eval` that is not defined by
# the user. Let's filter that out
return filter(x-> x != "eval", out[1])
end
functions_in (generic function with 1 method)
julia> whos(Foo)
Foo Module
julia> names(Foo)
1-element Array{Symbol,1}:
:Foo
julia> functions_in(Foo)
2-element Array{UTF8String,1}:
"bar"
"foo"