在Julia中查看用户定义的变量

问题描述 投票:7回答:3

也许这是我在文档中忽略的内容,但是如何在Julia中查看当前定义的变量列表?例如,在R中,您可以使用ls(),它将为您提供当前范围中用户定义对象的列表。朱莉娅有同等的人吗?

这与this question非常相似,但似乎whos函数(以及names)将列出模块和其他非用户定义的东西。如何简单列出用户定义但不从其他模块导出的变量?

julia
3个回答
5
投票

一种可能的方法是制作一个whos的变体,它限制当前模块中对象的摘要:

function whos_user(m::Module=current_module())
    for v in sort(names(m))
        s = string(v)
        if isdefined(m, v) && summary(eval(m, v)) != "Module" && s != "whos_user"
            println(s)
        end
    end
end

如果我们这样做的话

x = 1
y = "Julia"
f(n) = n + 1
whos_user()

我们得到

f
x
y

也可以写whos_user来返回一个符号数组而不是打印:

function whos_user(m::Module=current_module())
    v = sort(names(m))
    filter(i -> isdefined(m, i) && summary(eval(m, i)) != "Module" && string(i) != "whos_user", v)
end

然后运行与以前相同的测试代码,我们得到:

3-element Array{Symbol,1}:
  :f
  :x
  :y

如果没有更好的方法,那么我会接受这个答案。


2
投票

朱莉娅有whos function,类似于MATLAB,完成这项任务。


2
投票

对于Julia v0.7.0及更高版本,有一个很好的函数varinfo,它或多或少等同于MATLAB的whos函数。 varinfo仍然列出了一些模块名称,如BaseCore等,但比Julia的旧whos函数更紧凑。它还使用Markdown很好地渲染变量表,例如,

    julia> varinfo()
    name                    size summary
–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––------
    Base                         Module
    Core                         Module
    InteractiveUtils 164.866 KiB Module
    Main                         Module
    Plots             21.028 MiB Module
    ans                144 bytes 13-element Array{Symbol,1}
    x                   48 bytes 20-element StepRangeLen{Float64,Base.TwicePrecision{Float64},Base.TwicePrecision{Float64}}
    y                   48 bytes 20-element StepRangeLen{Float64,Base.TwicePrecision{Float64},Base.TwicePrecision{Float64}}
    y0                 440 bytes 50-element Array{Float64,1}
    y1                 440 bytes 50-element Array{Float64,1}
    z                  3.164 KiB 20×20 Array{Float64,2}
© www.soinside.com 2019 - 2024. All rights reserved.