5 votes

MATLAB - accès aux champs d'une structure ?

Supposons que j'ai la classe suivante :

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

J'utilise le struct parce qu'il y a d'autres propriétés qui sont des structs.

Existe-t-il un moyen de fournir un setter pour un champ de la structure ? En fournissant naïvement

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

ne fonctionne pas.

4voto

Jonas Points 54073

Vous devez définir la méthode set pour l'ensemble de la structure (voir ci-dessous). Vous pouvez également définir une classe pour les "Globals", qui ressemblera à une structure dans la plupart des cas (sauf que vous ne pouvez pas mal orthographier les noms des champs), et qui peut implémenter ses propres méthodes set/get pour ses propriétés.

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

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X