Как скрыть переменную из рабочей области в Matlab

Есть ли недокументированный способ сделать переменную «невидимой» в Matlab, чтобы она все еще существовала, но не отображалась в списке рабочей области?


person user2305193    schedule 15.08.2017    source источник
comment
Могу ли я спросить, почему?   -  person Ander Biguri    schedule 15.08.2017
comment
Если оно невидимо, как его вызвать?   -  person Ratbert    schedule 15.08.2017
comment
Вы можете вызвать его обратно, фактически вызвав переменную, которая просто «не отображается» в представлении рабочей области. Использование состоит в том, чтобы лучше узнать недокументированную java-часть Matlab (нет глубокого «почему»), это часть Matlab, о которой немного неясно узнать.   -  person user2305193    schedule 15.08.2017


Ответы (3)


Одна вещь, которую вы можете сделать, это иметь глобальные переменные. Интересным их свойством является то, что даже когда вы очищаете рабочую область, они все еще существуют в памяти, если только вы специально не очистите глобальные переменные. Пример ниже.

global hidden_var
hidden_var = 1;
clear
global hidden_var
hidden_var

Я все еще не совсем уверен, зачем вам вообще нужна эта функция, но это способ, которым вы можете «скрыть» переменные из рабочей области.

person Durkee    schedule 15.08.2017
comment
Пара предостережений: 1) clear приведет к тому, что переменная не появится при выдаче оператора who, но она все равно будет отображаться в глобальной рабочей области с who global; 2) После clear вы не сможете получить доступ к сохраненному значению, пока не выполните повторное объявление с помощью global hidden_var, после чего оно снова будет полностью видно в рабочей области; 3) clear all очистит даже глобальное рабочее пространство, удалив сохраненное значение. - person gnovice; 15.08.2017

Единственный способ, который я могу придумать, - это использовать функцию так же, как MATLAB определяет pi, i и j. Например:

function value = e
   value = 2.718;
end

В вашей рабочей области не будет переменной с именем e , но вы можете используйте его, как если бы были:

a = e.^2;

Технически она «невидима» только в том смысле, что такие функции, как who и whos, не указывают ее как переменную, но функция все равно должна существовать на вашем < href="https://www.mathworks.com/help/matlab/matlab_env/what-is-the-matlab-search-path.html" rel="noreferrer">путь MATLAB и все еще может быть вызывается любым другим скриптом или функцией.

person gnovice    schedule 15.08.2017
comment
Можно ли это переписать как анонимную функцию или ее действительно нужно сохранить как скрипт? - person user2305193; 15.08.2017
comment
Анонимная функция будет отображаться как переменная в рабочей области, поэтому ее нужно будет сохранить в файле .m по пути. - person gnovice; 15.08.2017

Я бы предложил сгруппировать переменные в структуру в качестве обходного пути. Выполнение приведенного ниже кода будет отображаться только как mainVariable в вашей рабочей области. Недостатком является то, что вам придется вводить все это, чтобы получить доступ к переменным, но вы можете сократить имена.


    mainVariable.actualVariable1 = 1
    mainVariable.actualVariable2 = [2, 4]
    mainVariable.actualVariable3 = 'Hello World'

person MosGeo    schedule 15.08.2017