MATLAB - установить / получить доступ к полям структуры? - PullRequest
5 голосов
/ 16 августа 2011

Предположим, у меня есть следующий класс:

classdef myClass
    properties
        Globals = struct(...
            'G1', 1,     ...
            'G2', 2      ...
        );
    end
    methods
         % methods go here
    end
end

Я использую структуру, потому что есть другие свойства, которые являются структурами.

Есть ли способ предоставить установщик для поля структуры? Наивно предоставляя

function obj = set.Globals.G1(obj, val)
    obj.Globals.G1 = val; % for example
end

не работает.

1 Ответ

4 голосов
/ 16 августа 2011

Вы должны определить метод set для всей структуры (см. Ниже). В качестве альтернативы, вы можете определить класс для «Globals», который будет выглядеть и чувствовать себя как структура для большинства практических целей (за исключением того, что вы не можете неправильно писать имена полей), и который может реализовывать свои собственные методы set / get для своих свойств.

function obj = set.Globals(obj,val)

%# look up the previous value
oldVal = obj.Globals;

%# loop through fields to check what has changed
fields = fieldnames(oldVal);

for fn = fields(:)' %'#
   %# turn cell into string for convenience
   field2check = fn{1};

   if isfield(val,field2check)
      switch field2check
      case 'G1'
         %# do something about G1 here
      case 'G2'
         %# do something about G2 here
      otherwise
         %# simply assign the fields you don't care about
         obj.Globals.(field2check) = val.(field2check);
      end
   end
end
end %# function
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...