获取Julia Lang中的当前变量列表

时间:2014-01-23 07:00:25

标签: julia

我是Julia Lang的新手。我来自Matlab的背景。

在Matlab中,当按whos命令时,我将获得当前范围内的所有变量;而且,我可以将它们存储在另一个变量中,例如x=whos; Julia中是否存在这样的命令? Matlab中的示例代码:

>> a=3;
>> b=4;
>> whos
Variables in the current scope:

Attr Name        Size                     Bytes  Class
==== ====        ====                     =====  ===== 
    a            1x1                          8  double
    b            1x1                          8  double
    prefix       1x16                        16  char

Total is 18 elements using 32 bytes.

4 个答案:

答案 0 :(得分:36)

您可以像使用Matlab命令一样使用Julia的whos函数。

julia> whos()
Base                          Module
Core                          Module
Main                          Module
ans                           Nothing

julia> x = 5
5

julia> whos()
Base                          Module
Core                          Module
Main                          Module
ans                           Int64
x                             Int64

您导入本地范围的任何模块(包/库)(使用using)也将显示在列表中(如Module s,如上面的Base,Core和Main)。

此外,您可以询问有关模块导出的名称。 Base是包含标准库的模块。

julia> whos(Base)
!                             Function
!=                            Function
!==                           Function
$                             Function
%                             Function
&                             Function
*                             Function
+                             Function
.... (lots and lots more)

考虑到该结果会从屏幕上滚动,您可以理解为什么要过滤结果。为此,您可以使用正则表达式。 (有关Julia正则表达式的更多信息,请参阅this manual section

julia> whos(r"M")
Main                          Module

julia> whos(Base, r"Match"i)
DimensionMismatch             DataType
RegexMatch                    DataType
each_match                    Function
eachmatch                     Function
ismatch                       Function
match                         Function
matchall                      Function

在您提出问题之前,我并未发现whos功能,所以感谢您帮助我学习新内容。 :)

github上的

Julia issue #3393是关于向whos输出添加内存大小。它还引用了使whos返回一个值,而不仅仅是打印出来的信息。

答案 1 :(得分:12)

不确定是否有更好的东西,但

names(Main)[4:end]

似乎有效。 [4:end]部分是因为它包含我认为您不想要的:Main:Core:Base。我希望他们永远都在开始。

答案 2 :(得分:1)

whos()在Julia的较新版本(1.0及更高版本)中不可用。请改用varinfo()。例如,varinfo(Core,r".*field.*")

答案 3 :(得分:0)

从1.1版开始,还有@locals宏

  

实验宏Base。@ locals返回当前局部变量名称和值的字典

Release notes