Bonjour,
Je rédéfinis subsref pour une user-class, mais je ne comprends pas le comportement suivant: les arguments recus par subsref ne sont pas les mêmes suivant que:
- je crée l'instance d'abord, puis je la subsref (le comportement est celui attendu)
- je renvoie une instance crée par une méthode statique, que je subsref immédiatement (subsref ne recoit alors que le premier indicage)
- Le problème est exactement le même avec une property constante.
Savez vous pourquoi, et comment passer outre
Merci d'avance
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28 classdef test properties(Constant) instance= test(); end methods(Static) function x= f() persistent xx; if isempty(xx);xx= kwargs();end x=xx; end function x= g() x= subsref(kwargs,substruct('()',{})); end function x= h() x=kwargs(); end end methods function self= test();end function varargout = subsref(self,idx) disp(idx) varargout= cell(1,nargout); %[varargout{:}]= builtin('subsref', self, idx); end end %% end
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18 % Instance puis accès: subsref recoit bien idx= [.label][{1}] x= test();x.label{1}; % Instance renvoyée par méthode statique, puis accès: % subsref recoit bien idx= [.label][{1}] z= test.f; z.label{1}; % methode statique: Tous ces appels ont un comportement bizarre test.f.label{1} % subsref recoit seulement idx= [.label] test.g.label{1} % subsref recoit seulement idx= [.label] test.h.label{1} % subsref recoit seulement idx= [.label] % attribut constant : même problème kwargs.instance.label{1} % subsref recoit seulement idx= [.label] z= kwargs.instance; z.label{1} % subsref recoit bien idx= [.label][{1}] % Ceci "plante" aussi test().label{1};
Partager