Подтвердить что ты не робот

Получить список текущих переменных в Julia Lang

Я новичок в Джулии Ланг. Я прихожу на фоне Матлаба.

В Matlab при нажатии команды whos я получу все переменные в текущей области; а также, я могу сохранить их в другой переменной, например x=whos;. Существуют ли такие команды в Джулии? Пример кода в 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.
4b9b3361

Ответ 1

Не уверен, что есть что-то лучше, но

names(Main)[4:end]

похоже, работает. Часть [4:end] состоит в том, что она включает в себя :Main, :Core и :Base, которые, я думаю, вам не нужны. Надеюсь, они всегда будут в начале.

Ответ 2

Вы можете использовать функции Julia whos точно так же, как и команда Matlab.

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 см. этот раздел руководства)

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, прежде чем вы спросили, поэтому спасибо, что помогли мне узнать что-то новое.:)

Проблема Julia № 3393 о github заключается в добавлении размеров памяти к выходу whos. Он также ссылается на то, что whos возвращает значение, а не просто распечатывает информацию.

Ответ 3

Обновление:

whos() 

... не работает ни в iJulia, ни в командной строке в Julia-1.0.0.

Это работает в Julia-0.6.4, хотя.

С другой стороны,

varinfo()

.... печатает информацию об экспортированных глобальных переменных в модуле. Например,

julia-1.0> varinfo()
name                    size summary                        
–––––––––––––––– ––––––––––– –––––––––––––––––––––––––––––––
Base                         Module                         
Core                         Module                         
InteractiveUtils 154.271 KiB Module                         
Main                         Module                         
PyPlot           781.872 KiB Module                         
ans               50.323 KiB Plots.Plot{Plots.PyPlotBackend}
myrepl               0 bytes typeof(myrepl)                 
x                   88 bytes 1×6 Array{Int64,2}             
y                    0 bytes typeof(y)                      

Надеюсь, это окажется полезным.

Ответ 4

whos() недоступен в новых версиях Julia (начиная с версии 1.0). varinfo() этого используйте varinfo(). Например, varinfo(Core,r".*field.*")

Ответ 5

Начиная с версии 1.1 есть также макрос @locals

Экспериментальный макрос Base. @Locals возвращает словарь текущих имен и значений локальных переменных

Примечания к выпуску