nelson.mixin.indexing.RedefinesParen
Personnaliser l'indexation par parenthèses d'une classe.
📝Syntaxe
classdef MaClasse < nelson.mixin.indexing.RedefinesParen
📥Arguments d'entrée
Paramètre Description
obj objet d'une classe derivee de nelson.mixin.indexing.RedefinesParen.
📤Arguments de sortie
Paramètre Description
obj objet prenant en charge une indexation par parentheses personnalisee.
📄Description

Dérivez de nelson.mixin.indexing.RedefinesParen pour donner à une classe son propre comportement d'indexation par parenthèses, par exemple pour un conteneur qui indexe ses données stockées plutôt qu'un tableau d'objets.

Une sous-classe implémente ces méthodes protégées :

parenReference(obj, indexOp) - valeur de obj(...).

parenAssign(obj, indexOp, value) - résultat de obj(...) = value.

parenDelete(obj, indexOp) - résultat de obj(...) = [].

parenListLength(obj, indexOp, indexContext) - nombre de valeurs produites.

et ces méthodes publiques : size(obj), cat(dim, ...) et la méthode statique empty(...).

L'argument indexOp est un tableau de nelson.indexing.IndexingOperation. Pour une expression chaînée comme obj(i).field, le hook est appelé une seule fois avec la chaîne entière : numel(indexOp) vaut le nombre d'opérations (2 ici), indexOp(1) est l'opération parenthèses et indexOp(2) l'opération .field. Appliquez la chaîne entière aux données stockées avec la forme dynamique obj.Data.(indexOp), ou lisez un niveau via indexOp(k).Indices{...} / indexOp(k).Name. La classe de base fournit numel, length, isempty, ndims, end, horzcat et vertcat à partir des méthodes abstraites size/cat.

Une indexation à un seul niveau (obj(i)) appelle le hook avec un indexOp scalaire (numel(indexOp) == 1). Quelques formes de chaîne restent évaluées étape par étape (le hook voit une seule opération, la valeur est identique) : un niveau .method(args), une chaîne utilisant end après le premier niveau, et l'affectation chaînée.

💡Exemples
Un conteneur qui redéfinit l'indexation par parenthèses.
classdef Bag < nelson.mixin.indexing.RedefinesParen
  properties
    Data
  end
  methods
    function obj = Bag(x)
      obj.Data = x;
    end
    function varargout = size(obj, varargin)
      varargout{1} = size(obj.Data, varargin{:});
    end
    function obj = cat(dim, varargin)
      acc = [];
      for k = 1:numel(varargin)
        acc = cat(dim, acc, varargin{k}.Data);
      end
      obj = Bag(acc);
    end
  end
  methods (Access = protected)
    function varargout = parenReference(obj, indexOp)
      % indexOp peut contenir toute la chaîne ; l'appliquer aux données stockées.
      [varargout{1:nargout}] = obj.Data.(indexOp);
    end
    function obj = parenAssign(obj, indexOp, varargin)
      obj.Data.(indexOp) = varargin{1};
    end
    function obj = parenDelete(obj, indexOp)
      obj.Data.(indexOp) = [];
    end
    function n = parenListLength(obj, indexOp, ctx)
      n = 1;
    end
  end
end
🔗Voir aussi
nelson.mixin.indexing.RedefinesBracenelson.mixin.indexing.RedefinesDotnelson.indexing.IndexingOperation
🕔Historique des versions
Version Description
2.0.0 version initiale
Modifier cette page sur GitHub