Получить свойство класса по его имени - PullRequest
0 голосов
/ 11 сентября 2018

Возможно ли динамическое достижение свойства класса по его имени?

classdef ClassA < handle        
    properties
        a
    end        
end

obj = ClassA;
obj.GetVar('a') = 10;

Есть что-то вроде GetVar('a')?

1 Ответ

0 голосов
/ 11 сентября 2018

Существует 4 способа получить доступ к полю структуры или пользовательскому объекту obj, когда его имя задается строкой str (о которой я знаю). Следующее все эквивалентно obj.a, учитывая str='a':

  1. с использованием eval (не рекомендуется!) :

    eval(['obj.',str])
    
  2. с использованием subsref (или subsasgn для назначения):

    S = substruct('.',str);
    subsref(obj,S)
    
  3. с использованием getfield:

    getfield(obj,str)
    
  4. с использованием функциональной формы оператора точки :

    obj.(str)
    

Последнее, конечно, предпочтительнее.

subsref и subsasgn интересны тем, что представляют собой методы, которые вы перегрузили бы в своем классе, чтобы изменить поведение индексации. Метод getfield имеет очень ограниченное применение, но когда-то он был единственным разумным способом доступа к полям с использованием динамических имен до введения синтаксиса obj.(str).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...