2010-01-11 4 views
5

J'essaie d'écrire une fonction de journalisation généralisée pour tous les paramètres d'entrée transmis à une fonction dans MATLAB. Est-il possible de passer facilement tous les paramètres d'entrée à une autre fonction sans nommer individuellement les paramètres? Dans la fonction de journalisation, je peux bien sûr utiliser inputname(i) dans une boucle for pour obtenir les noms des paramètres. Je préférerais ne pas avoir à effectuer cette logique dans la fonction principale. Alors, y a-t-il un moyen de faire quelque chose comme LogParams(allInputParams)?Paramètres de la fonction de journalisation dans MATLAB

Répondre

8

Il semble que vous ayez une fonction principale, et à partir de cette fonction, vous voulez appeler une fonction LogParams pour obtenir une liste des noms des variables passées à la fonction principale. Voici une façon que vous pouvez mettre en œuvre votre fonction LogParams:

function names = LogParams 
    names = evalin('caller','arrayfun(@inputname,1:nargin,''UniformOutput'',0)'); 
end 

La sortie de LogParams retourné sera un réseau de cellules contenant les noms des variables passées à la fonction qui appelle LogParams. La solution ci-dessus utilise les fonctions suivantes:

  • EVALIN: pour évaluer une expression dans l'espace de travail de la fonction appelante.
  • ARRAYFUN: comme alternative à une boucle for.
  • NARGIN: pour obtenir le nombre d'arguments transmis à une fonction.
  • INPUTNAME: pour obtenir le nom d'une variable d'entrée.

A titre d'illustration de la façon dont LogParams travaux, créer la fonction suivante qu'il appelle:

function main_function(a,b,varargin) 
    disp(LogParams); 
end 

et maintenant l'appeler avec un certain nombre d'entrées (en supposant que les variables x, y et z sont définis dans l'espace de travail):

>> main_function(x,y) 
    'x' 'y' 

>> main_function(x,y,z) 
    'x' 'y' 'z' 

>> main_function(x,y,z,z,z,z) 
    'x' 'y' 'z' 'z' 'z' 'z' 
+0

Très soignée! .......... (points à remplir à 15 caractères) –

+0

Merci. Qui aide. –

+0

+1 pour un impact minimal sur la fonction d'appel. – Marc

Questions connexes