Есть две проблемы с кодом:
1) Когда who вызывается функцией, она возвращает список переменных, доступных в рабочем пространстве функции, а не в базовой рабочей области. Если вы удалите точку с запятой из первой строки кода, вы увидите вывод функции:
workspace_variables = who('-regexp',variable_to_check)
Когда вы запустите функцию из командной строки, вы увидите, что функция имеет только одну переменную, когда эта строка выполняется, и эта переменная является входной переменной variable_to_check:
>> workspace_variables_check('b')
workspace_variables =
1×1 cell array
{'variable_to_check'}
Все переменные a, b, c et c находятся в «базовом» рабочем пространстве и являются отдельным функция не имеет к ним доступа. Понятие, какие переменные доступны для функции, называется scope . Вот ссылка на сообщение в блоге , в котором обсуждается область видимости в MATLAB.
2) Другая вещь, которая происходит, заключается в том, что та же строка кода выполняет регулярное выражение для имени переменных присутствует, это строка 'variable_to_check'. Таким образом, символы «a», «b», «c» соответствуют регулярному выражению, а «d» - нет. Таким образом, вы можете проверить загадочную переменную "v":
>> workspace_variables_check('v')
workspace_variables =
1×1 cell array
{'variable_to_check'}
Present from Workspace
Также "ch", "var" и др. c. Могу поспорить, что это сбивает с толку отладку:)
Если вы хотите, чтобы функция проверяла переменные в «базовом» рабочем пространстве (это то, что вы используете из командной строки), вы можете использовать это:
function output = workspace_variables_check(variable_to_check)
% Check to see if a variable exists in the Base Workspace
exist_string = sprintf('exist(''%s'')',variable_to_check);
workspace_variables = evalin('base',exist_string);
if workspace_variables == 1 % A variable by this name is present in the workspace
disp('Present from Workspace')
output = 1 ;
else % A variable by this name is not present in the workspace
disp('Absent in Workspace')
output = 0 ;
end