也许这是我在文档中忽略的内容,但是如何在Julia中查看当前定义的变量列表?例如,在R中,您可以使用ls()它来为您提供当前范围中的用户定义对象的列表.朱莉娅有同等的人吗?
这与此问题非常相似,但似乎whos函数(以及names)将列出模块和其他非用户定义的内容.如何简单列出用户定义但不从其他模块导出的变量?
一种可能的方法是对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
Run Code Online (Sandbox Code Playgroud)
如果我们这样做的话
x = 1
y = "Julia"
f(n) = n + 1
whos_user()
Run Code Online (Sandbox Code Playgroud)
我们得到
f
x
y
Run Code Online (Sandbox Code Playgroud)
也可以编写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
Run Code Online (Sandbox Code Playgroud)
然后运行与以前相同的测试代码,我们得到:
3-element Array{Symbol,1}:
:f
:x
:y
Run Code Online (Sandbox Code Playgroud)
如果没有更好的方法,那么我会接受这个答案.
小智 5
对于 Julia v0.7.0 及更高版本,有一个很好的函数varinfo,它或多或少相当于 MATLAB 的whos函数。varinfo仍然列出了一些模块名称Base,如Core、 等,但比 Julia 的旧函数更加紧凑whos。它还使用 Markdown 很好地呈现变量表,例如,
julia> varinfo()\n name size summary\n\xe2\x80\x93\xe2\x80\x93\xe2\x80\x93\xe2\x80\x93\xe2\x80\x93\xe2\x80\x93\xe2\x80\x93\xe2\x80\x93\xe2\x80\x93\xe2\x80\x93\xe2\x80\x93\xe2\x80\x93\xe2\x80\x93\xe2\x80\x93\xe2\x80\x93\xe2\x80\x93\xe2\x80\x93\xe2\x80\x93\xe2\x80\x93\xe2\x80\x93\xe2\x80\x93\xe2\x80\x93\xe2\x80\x93\xe2\x80\x93\xe2\x80\x93\xe2\x80\x93\xe2\x80\x93\xe2\x80\x93\xe2\x80\x93\xe2\x80\x93\xe2\x80\x93\xe2\x80\x93\xe2\x80\x93\xe2\x80\x93\xe2\x80\x93\xe2\x80\x93\xe2\x80\x93\xe2\x80\x93\xe2\x80\x93\xe2\x80\x93\xe2\x80\x93\xe2\x80\x93\xe2\x80\x93\xe2\x80\x93\xe2\x80\x93\xe2\x80\x93\xe2\x80\x93\xe2\x80\x93\xe2\x80\x93\xe2\x80\x93\xe2\x80\x93\xe2\x80\x93\xe2\x80\x93\xe2\x80\x93\xe2\x80\x93\xe2\x80\x93\xe2\x80\x93\xe2\x80\x93\xe2\x80\x93\xe2\x80\x93\xe2\x80\x93\xe2\x80\x93\xe2\x80\x93\xe2\x80\x93\xe2\x80\x93\xe2\x80\x93\xe2\x80\x93\xe2\x80\x93\xe2\x80\x93\xe2\x80\x93\xe2\x80\x93\xe2\x80\x93\xe2\x80\x93\xe2\x80\x93\xe2\x80\x93\xe2\x80\x93\xe2\x80\x93------\n Base Module\n Core Module\n InteractiveUtils 164.866 KiB Module\n Main Module\n Plots 21.028 MiB Module\n ans 144 bytes 13-element Array{Symbol,1}\n x 48 bytes 20-element StepRangeLen{Float64,Base.TwicePrecision{Float64},Base.TwicePrecision{Float64}}\n y 48 bytes 20-element StepRangeLen{Float64,Base.TwicePrecision{Float64},Base.TwicePrecision{Float64}}\n y0 440 bytes 50-element Array{Float64,1}\n y1 440 bytes 50-element Array{Float64,1}\n z 3.164 KiB 20\xc3\x9720 Array{Float64,2}\nRun Code Online (Sandbox Code Playgroud)\n