2010-01-11 15 views
5

Estoy tratando de escribir una función de registro generalizada para todos los parámetros de entrada pasados ​​a una función en MATLAB. ¿Es posible pasar fácilmente todos los parámetros de entrada a otra función sin nombrar los parámetros individualmente? En la función de registro, puedo, por supuesto, usar inputname(i) en un ciclo for para obtener los nombres de los parámetros. Preferiría no tener que realizar esta lógica en la función principal. Entonces, ¿hay alguna manera de hacer algo como LogParams(allInputParams)?Parámetros de la función de registro en MATLAB

Respuesta

8

Parece que tiene una función principal, y desde esa función desea llamar a una función LogParams para obtener una lista de los nombres de las variables pasadas a la función principal. He aquí una manera que podría poner en práctica su función LogParams:

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

La salida de regresar de LogParams será una matriz de celdas que contiene los nombres de las variables se pasan a la función que llama a LogParams. La solución anterior utiliza las siguientes funciones:

  • EVALIN: para evaluar una expresión en el espacio de trabajo de la función de llamada.
  • ARRAYFUN: como alternativa a un bucle for.
  • NARGIN: para obtener la cantidad de argumentos pasados ​​a una función.
  • INPUTNAME: para obtener el nombre de una variable de entrada.

Como una ilustración de cómo LogParams obras, crean la siguiente función que llama:

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

y ahora lo llaman con un número de entradas (suponiendo que las variables x, y y z se definen en el área de trabajo):

>> 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

Very neat! .......... (puntos para pad a 15 caracteres) –

+0

Gracias. Eso ayuda. –

+0

+1 para un impacto mínimo a la función de llamada. – Marc

Cuestiones relacionadas