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

Get list of variables in the current namespace in Julia

我有一个与 this one 相似但不同的问题。我在一个模块中有一个函数,我想看看函数命名空间中定义了哪些变量。在另一个 post 中,他们说要使用 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,无法迭代。如果可能的话,我更喜欢在某种列表或字典中输出变量和值的函数。

这是你想要的吗?

module Test

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

end

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