Существует 4 способа получить доступ к полю структуры или пользовательскому объекту obj
, когда его имя задается строкой str
(о которой я знаю). Следующее все эквивалентно obj.a
, учитывая str='a'
:
с использованием eval
(не рекомендуется!) :
eval(['obj.',str])
с использованием subsref
(или subsasgn
для назначения):
S = substruct('.',str);
subsref(obj,S)
с использованием getfield
:
getfield(obj,str)
с использованием функциональной формы оператора точки :
obj.(str)
Последнее, конечно, предпочтительнее.
subsref
и subsasgn
интересны тем, что представляют собой методы, которые вы перегрузили бы в своем классе, чтобы изменить поведение индексации. Метод getfield
имеет очень ограниченное применение, но когда-то он был единственным разумным способом доступа к полям с использованием динамических имен до введения синтаксиса obj.(str)
.