как в matlab проверить наличие структуры с полями в рабочей области
У меня есть строка и я хочу проверить, существует ли в рабочей области какая-либо переменная с тем же именем. В рабочей области у меня тоже много структур М. Н. О Н. М. Н. М. Н. м и др. Я могу только проверить, существует ли переменная с именем M. Как углубиться в эту структуру? Я попробовал:
exist('M.N')
YesNo = any(strcmp(who,'M.N.O'))
evalin('base','exist(''M.N.O'',''var'')')
все дают мне ту же проблему, поэтому я застрял.
2 ответов
один вариант: напишите рекурсивную функцию, чтобы развернуть структуры до их полей листа, добавив поля в список.
(непроверенный, концептуальный код - вероятно, не будет работать так, как есть)
function varlist = getStructFields(var,varlist)
if isstruct(var)
fn = fieldnames(var);
varlist = vertcat(varlist,fn); %# append fields to the list
for field = fn' %# ' create row vector; iterate through fields
varlist = getStructFields(var.(char(field)), varlist); %# recursion here
end
end
end
затем вы можете использовать any(strcmp(who,'M.N.O'))
проверьте, что вы уже придумали.
можно использовать действительно чтобы проверить, имеет ли переменная определенное поле. См. ссылку для примеров!
для вашего примера вам понадобится:
isfield(M,'N')
и если это правда, вы можете идти глубже:
isfield(M.N,'O')
обратите внимание, что
isfield(M,'N.O')
не работает ;)