Bonjour
Vous allez sûrement trouver que je prend le problème à l'envers, et c'est peut être ça mon problème... J'aimerais qu'une fonction que j'appelle ait toujours le même nombre de sorties (ici la fonction myfunction qui a 2 sorties qui sont a et b) mais que l'attribution ou non d'une valeur à b dépende d'une entrée de cette même fonction et non pas de nargout. En d'autre terme, j'aimerai que si isAllOutputs==1, la fonction myfunction me renvoie une valeur pour a et une valeur pour b, sinon seulement une valeur pour a (et on s'en fiche de b).
Pourquoi je veux faire ça ? C'est que le calcul de b prend un peu de temps (15% du temps total d'execution de test_varargout) et un peu d'espace mémoire mais n'est pas toujours nécessaire.
Je sais qu'il serait possible de faire quelque chose comme
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 function test_varargout isAllOutputs=0; [a,b]=myfunction(isAllOutputs); end function varargout=myfunction(isAllOutputs) disp(nargout) a=1; b=2; if isAllOutputs==1 varargout{1}=a; varargout{2}=b; else varargout{1}=a; end end
avec un traditionnel varargout dans myfunction. Cette solution classique ne me convient que peu. On retrouve déjà très fréquemment l'appel de la fonction myfunction car j'ai déjà de nombreux if dans la test_varargout. Je devrais donc multiplier par 2 le nombre de lignes de la fonction test_varargout qui est déjà bien long... J'ai peur que ça devienne moyennement lisible.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 function test_varargout if isAllOutputs==1 [a,b]=myfunction; else [a]=myfunction; end end
Également, contrainte impérative, la solution ne doit pas ralentir myfunction car elle est appelée plusieurs millions de fois.
Des idées ?
Partager