获取Julia中当前命名空间中变量列表

3

我有一个问题,类似于但不同于这个。我有一个函数在一个模块内,我想看看在函数命名空间中定义了哪些变量。在其他帖子中,他们说要使用varinfo,但这似乎只适用于Main命名空间。例如,如果我运行以下代码:

module Test

function hello()
    a = 1
    varinfo()
    return a
end

end

import .Test

Test.hello()

我得到了这个错误。
WARNING: replacing module Test.
ERROR: UndefVarError: varinfo not defined

有没有一种方法可以获取给定命名空间内的变量列表?我想要的是一个函数,当调用它时,输出所有可用的变量(例如我的示例中的a)以及命名空间内可用的模块。
PS. 我想补充一下,varinfo非常受限,因为它的输出是Markdown.MD,无法迭代。如果可能的话,我更喜欢一个输出变量和值的某种列表或字典的函数。
2个回答

2

varinfo 只显示全局变量。 如果你需要本地变量,你需要使用 Base.@locals 宏:

module Test
    function hello()
        a = 1
        println(Base.@locals)
        return a
    end
end

现在你可以做:

julia> Test.hello()
Dict{Symbol, Any}(:a => 1)
1

0

这是你想要的吗?

module Test

function hello()
    a = 1
    println(Main.varinfo(@__MODULE__; all=true, imported=true))
    return a
end

end

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接