У меня недавно была похожая проблема, поэтому я вместе взломал быструю функцию, которая будет определять вновь созданные переменные на основе исходного состояния.
function names2 = findNewVariables(state)
persistent names1
if state == 1
% store variables currently in caller workspace
names1 = evalin('caller', 'who');
names2 = [];
elseif state == 2
% which variables are in the caller workspace in the second call
names2 = evalin('caller', 'who');
% find which variables are new, and filter previously stored
ids = ismember(names2,names1) ~= 1;
names2(~ids) = [];
names2(strcmp(names2, 'names1')) = [];
names2(strcmp(names2, 'names2')) = [];
names2(strcmp(names2, 'ans')) = [];
end
Чтобы использовать это, сначала инициализируйте функцию с аргументом 1
, чтобы получить переменные, которые в данный момент находятся в рабочей области: findNewVariables(1)
. Затем запустите некоторый код, скрипт, что угодно, что создаст некоторые переменные в рабочей области. Затем снова вызовите функцию и сохраните ее вывод следующим образом: new_vars = findNewVariables(2)
. new_vars
- это массив ячеек, содержащий имена вновь созданных переменных.
Пример:
% make sure the workspace is empty at the start
clear
a = 1;
% initialize the function
findNewVariables(1);
test % script that creates b, c, d;
% store newly created variable names
new_vars = findNewVariables(2);
Что приведет к:
>> new_vars
new_vars =
3×1 cell array
{'b'}
{'c'}
{'d'}
Примечание , при этом будут обнаружены только вновь созданные переменные (следовательно, clear
требуется в начале скрипта), а не обновленные / перезаписанные переменные.