Bonjour,
Je définis une classe qui surcharge subsref subsasgn et numel.
Soit x une instance.
x.machin appelle bien x.numel(); mai pourquoi diable x.machin{:} n'appelle-t'il pas x.numel() ?
Merci d'avance.
Bonjour,
Je définis une classe qui surcharge subsref subsasgn et numel.
Soit x une instance.
x.machin appelle bien x.numel(); mai pourquoi diable x.machin{:} n'appelle-t'il pas x.numel() ?
Merci d'avance.
Bonjour,
Pourrais-tu nous montrer la classe en question?
Es-tu sûr qu'il doive appeler NUMEL dans les 2 cas?
Duf
Simulink & Embedded Coder
Au boulot : Windows 7 , MATLAB r2016b
A la maison : ArchLinux mais pas MATLAB
Bonjour Duf,
Absolument pas, mais s'il existe une doc officielle et détaillée sur le sujet je suis preneur !Es-tu sûr qu'il doive appeler NUMEL dans les 2 cas?
Cela étant, mon subsref recoit bien les 2 indices <.machin> et <{:}>, donc je ne vois vraiment pas, si mon numel n'est pas appelé, comment matlab va bien pouvoir calculer le nombre d'éléments à renvoyer.
La classe est lourde, je commence par le code de subsref
En gros je redirige self.machin sur un sous élément de self. Les lignes
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 function varargout= subsref(self,idx) varargout= {}; i= idx; [loc,i,v,ot]= self.cn_dot(i,0); if ot== 1 v=self; i=[substruct('.', 'wrapped') i]; end if ~isempty(i) varargout= {nan};%cell(v.numel(idx),1); if isequalwithequalnans(idx(end),substruct('{}',{':'})) %varargout= cell(numel(subsref(v,idx(1:end-1))),1); varargout= num2cell(nan(1,numel(subsref(v,idx(1:end-1))))); end [varargout{:}]= builtin('subsref',v,i); else varargout= {v}; end end
sont une tentative infructueuse de ma part de renvoyer le nombre attendu d'arguments sur self.machin{:}. Voici ce qu'il se passe en mode debug sur
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 if isequalwithequalnans(idx(end),substruct('{}',{':'})) %varargout= cell(numel(subsref(v,idx(1:end-1))),1); varargout= num2cell(nan(1,numel(subsref(v,idx(1:end-1))))); end1/ self.numel n'est pas appelé
Code : Sélectionner tout - Visualiser dans une fenêtre à part x.machin{:}
2/ mon subsref recoit bien les deux indices .machin et {:}
3/ le varargout que je crée est de la bonne taille, et builtin('subsref', y assigne ce que j'attends
4/ En sortant de la fonction je ne récupère que le 1er élément de ce varargout !!!!
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager