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

在Julia中查看用户定义的变量,julia,Julia,也许这是我在文档中忽略的东西,但是如何查看Julia中当前定义的变量列表呢?例如,在R中,您可以使用ls(),这将为您提供当前范围内用户定义对象的列表。茱莉亚身上有类似的东西吗 这与非常相似,但似乎whos函数(以及名称)将列出模块和其他非用户定义的内容。如何简单地列出用户定义的变量,而不是从其他模块导出的变量?Julia与MATLAB类似,用于此任务。一种可能的方法是创建一个限制当前模块中对象摘要的whos变体: 函数whos\u user(m::Module=current\u Module

也许这是我在文档中忽略的东西,但是如何查看Julia中当前定义的变量列表呢?例如,在R中,您可以使用
ls()
,这将为您提供当前范围内用户定义对象的列表。茱莉亚身上有类似的东西吗


这与非常相似,但似乎
whos
函数(以及
名称
)将列出模块和其他非用户定义的内容。如何简单地列出用户定义的变量,而不是从其他模块导出的变量?

Julia与MATLAB类似,用于此任务。

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

函数whos\u user(m::Module=current\u Module())
对于排序中的v(名称(m))
s=字符串(v)
如果定义了(m,v)和汇总(评估(m,v))!=“模块”&s!=“谁是用户”
印地安(s)
结束
结束
结束
如果我们这样做了

x=1
y=“朱莉娅”
f(n)=n+1
谁的用户()
我们得到

f
x
Y
还可以编写
whos_user
以返回符号数组,而不是打印:

函数whos\u user(m::Module=current\u Module())
v=排序(名称(m))
过滤器(i->isdefined(m,i)和summary(eval(m,i))!=“模块”和字符串(i)!=“谁的用户”,v)
结束
然后运行与之前相同的测试代码,我们得到以下结果:

3元素数组{Symbol,1}:
:f
:x
:y

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

对于Julia v0.7.0及更高版本,有一个很好的函数
VariInfo
,它或多或少相当于MATLAB的
whos
函数
VariInfo
仍然列出了一些模块名称,如
Base
Core
等,但比Julia以前的
whos
函数要简洁得多。它还使用标记来很好地呈现变量表,例如

    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}

@音乐方面:编辑以澄清我的意图。与这个问题稍有不同的是,我只想查看用户定义的变量,而不是从模块中导出的变量。我想您关注的是这个拉取请求中的行为:。您应该添加对建议的API的反馈,并帮助将其合并@很好,谢谢你的提醒。我没有写权限,因此无法合并拉取请求,但我留下了评论。API有点奇怪(显然我是这个功能的粉丝)对,我只是想说你的反馈会有助于合并,因为剩下的唯一问题似乎是关于API的。谢谢你这么做!谢谢你的回答。有没有办法让
whos
只列出用户定义的变量,而不是所有可用的模块等?这并不完全是您要找的,但假设您在REPL工作,您可以尝试
whos(Main)
,它只列出主模块中的名称。@Spenceryon2:我试过了,但它仍然列出了所有模块和所有内容。例如,在JuliaBox上,
whos(Main)
prints
ArrayView模块,Base模块,
它越来越近了,因为用户定义的变量也会在那里。是的,我担心你会有太多其他东西在那里。我不知道有什么方法可以把范围缩小到用户定义的对象。@Spenceryon2:我想我找到了一个不错的方法。将其作为答案发布。这是一个需要了解的有用功能。谢谢