2012-10-17 1 views
11

Je me suis retrouvé à essayer d'interfacer une classe personnalisée avec des fonctions intégrées, et j'ai rencontré une situation que je ne pouvais résoudre qu'avec eval, je voudrais une manière «plus propre».Numéro de sortie de la variable d'appel de fonction

Fondamentalement, la fonction intégrée est définie comme varargout=blabla(varargin) J'ai défini une fonction surchargée dans la classe personnalisée, comme varargout=blabla(varargin). La fonction ressemble:

function varargout=blabla(varargin) 
    varargout=blabla(function_of_varargin) 
end 

La fonction de varargin il se transforme de la classe personnalisée aux clas BUILTIN. Mais cela ne fonctionne pas tel quel: En principe, lorsque la fonction interne est appelée dans la fonction override, elle ne voit qu'un seul paramètre de sortie (varargout), même si la fonction de remplacement personnalisé est appelée avec plus d'un paramètre de sortie .

Je l'ai résolu en appelant essentiellement ceci:

[varargout{1},varargout{2},...,varargout{nargout}]=blabla(function_of_varargin) 

La construction du LHS avec une boucle et eval-ing.

+1

regardez [Comment surcharger les fonctions MATLAB intégrées?] (Http://www.mathworks.nl/support/solutions/fr/data/1-18T0R/index.html?product=ML&solution= 1-18T0R) –

Répondre

7

Avez-vous essayé ceci:

[varargout{1:nargout}] = blabla(varargin{:}) 

?

+0

Eh bien, que savez-vous, quand la connaissance Matlab est sèche, il y a toujours une syntaxe magique pour le faire fonctionner. Cela fonctionne parfaitement, Merci – rienafairefr

+0

+1 bonne prise :) Ceci n'est pas limité aux classes et aux fonctions membres. Fonctionne aussi pour les fonctions ordinaires. – angainor

+0

@angainor: Yup. L'extension du tableau de cellules est appliquée aux tableaux de cellules 'varargin' et' varargout' - c'est souvent négligé. Ils sont vraiment juste des tableaux de cellules ordinaires :) –

Questions connexes