gpt4 book ai didi

julia - 有什么方法可以获取模块中定义的函数列表?

转载 作者:行者123 更新时间:2023-12-04 17:47:32 25 4
gpt4 key购买 nike

是否有任何内省(introspection)的魔法可以给我一个模块中定义的函数列表?

module Foo
function foo()
"foo"
end
function bar()
"bar"
end
end

一些神话般的功能,例如:
functions_in(Foo)

哪个会返回:[foo,bar]

最佳答案

这里的问题是 nameswhos列出从模块中导出的名称。如果您想看到它们,那么您需要执行以下操作:

module Foo

export foo, bar

function foo()
"foo"
end
function bar()
"bar"
end
end # module

此时 nameswhos会列出所有内容。

如果您碰巧在 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

不知何故,制表符补全正在查找未导出的名称,因此必须有一种方法让 Julia 将它们告诉您。我只是不知道那个功能是什么。

编辑

我做了一点挖掘。未导出的函数 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"

关于julia - 有什么方法可以获取模块中定义的函数列表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28731902/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com