как в 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')

не работает ;)