2016-01-28 4 views
0

Когда я запускаю функцию, я не получаю все переменные из рабочего пространства. Когда я устанавливаю точки останова, чем только я могу получить переменные в рабочей области. Таким образом, как получить переменные в рабочей области без установки точки останова?Получение переменной из рабочего пространства из функции

ответ

3

Вы можете использовать

assignin('base','variablename',value); 

писать переменные из вашей функции-Workspace для вашей базовой рабочей области.
Когда вы используете контрольные точки, вы можете увидеть Рабочее пространство функции или скрипта, на котором остановилось выполнение. Вы также можете выбрать в своем редакторе ту Рабочую область (стек), которую вы хотите увидеть в режиме отладки.
Если вы хотите, чтобы написать всю функцию-Workspace в вашу базовую рабочую область (которая в смысле инкапсуляции не рекомендуется), вы можете использовать

vars=whos; 
for k=1:length(vars) 
    assignin('base', vars(k).name, eval(vars(k).name)); 
end 
5

Хотя assignin трюка удобно в определенных ситуациях, один должны как правило, не имеют привычки к неявным образом «пуфинг» переменных в пространствах имен. Более очевидным первым подходом должно быть specify outputs to your function, что является основным синтаксисом MATLAB.

Если у вас есть небольшое количество выходов, вы можете указать их отдельно. Например:

function [c, d] = trialcode(a, b) 
% Simple summation 
c = a + b; 
% Simple product 
d = a * b; 
end 

Если у вас есть много выходов, когда подход является сохранение желаемых результатов в structure или cell array, так что вы выводя одну переменную, вместо того, чтобы указать каждый выход. Тонкая настройка приведенного выше примера:

function [output] = trialcode(a, b) 
% Simple summation 
output.c = a + b; 
% Simple product 
output.d = a * b; 
end 
Смежные вопросы