也许这是我在文档中忽略的内容,但是如何在Julia中查看当前定义的变量列表?例如,在R中,您可以使用ls()
,它将为您提供当前范围中用户定义对象的列表。朱莉娅有同等的东西吗?
这与this question非常相似,但似乎whos
函数(以及names
)将列出模块和其他不是用户定义的内容。如何简单列出用户定义但不从其他模块导出的变量?
答案 0 :(得分: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
如果没有更好的方法,那么我会接受这个答案。
答案 1 :(得分:2)
朱莉娅有whos
function,类似于MATLAB,完成这项任务。
答案 2 :(得分:2)
对于Julia v0.7.0及更高版本,有一个不错的函数varinfo
,它或多或少地等同于MATLAB的whos
函数。 varinfo
仍列出了一些模块名称,例如Base
,Core
等,但是比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}