classdef MaClasse < nelson.mixin.indexing.RedefinesParen
| Paramètre | Description |
|---|---|
| obj | objet d'une classe derivee de nelson.mixin.indexing.RedefinesParen. |
| Paramètre | Description |
|---|---|
| obj | objet prenant en charge une indexation par parentheses personnalisee. |
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.
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
| Version | Description |
|---|---|
| 2.0.0 | version initiale |