2015-06-22 4 views
5

Возможно, это то, что я просто пропустил в документации, но как вы можете просмотреть список текущих переменных в Julia? Например, в R вы можете использовать ls(), который предоставит вам список пользовательских объектов в текущей области. Есть ли в Джулии эквивалент?Просмотр пользовательских переменных в Julia

Это очень похоже на this question, но мне кажется, что whos функция (как и names) будут перечислены модули и другие вещи, которые не являются определяемые пользователем. Как просто перечислить переменные, которые были определены пользователем и не экспортированы из других модулей?

+0

@musically_ut: Отредактировано для уточнения моих намерений. Это немного отличается от этого вопроса в том, что я ищу для просмотра _only_ переменных, которые были определены пользователем, а не экспортированы из модулей. –

+0

Я думаю, что вы после того, как поступили в этом запросе на растяжение: https://github.com/JuliaLang/julia/pull/10108. Вы должны добавить свои отзывы о предлагаемом API и помочь им слиться! –

+1

@MattB .: Ницца, спасибо за это. У меня нет доступа для записи, поэтому я не могу объединить запрос на перенос, но я оставил комментарий. API немного странный IMO, я явно поклонник функциональности. ;) –

ответ

3

Одним из возможных подходов, чтобы сделать вариант 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

Julia имеет whos function, сродни MATLAB, для этой задачи.

+0

Спасибо за ваш ответ. Есть ли способ сделать переменные списка 'whos', определенные пользователем, а не все доступные модули и т. Д.? –

+1

Это не совсем то, что вы ищете, но при условии, что вы работаете в REPL, вы можете попробовать 'whos (Main)', который будет перечислять только имена в основном модуле. – spencerlyon2

+0

@ spencerlyon2: Я пробовал это, но он все еще перечисляет все модули и все такое. Например, на JuliaBox 'whos (Main)' prints 'ArrayViews Module, Base Module, ...' Он становится все ближе, поскольку пользовательские переменные также будут там. –

Смежные вопросы