2011-07-27 16 views
5

Quiero crear una función function ExtremePoints = AnalyseData(ScanData).Matlab - uso de variables del espacio de trabajo

Quiero poder ejecutar la función sin pasar el argumento ScanData, y en esta situación quiero usar una variable con el mismo nombre de Matlab Workspace.

¿Es posible utilizar dentro del cuerpo de la función la variable ScanData que aparece en el área de trabajo?

¿O debería primero guardar el contenido de la variable ScanData del espacio de trabajo en un archivo .mat y luego cargar ese archivo en el cuerpo de la función?

+3

Como @Edric ya menciona: se desaconseja (fuertemente) hacerlo, ya que no se podrá volver a utilizar correctamente la función en otro lugar sin mucho dolor (variables faltantes, algo completamente diferente almacenado en 'ScanData', menos claro code, mlint no lo advertirá de sus errores dentro de 'eval' o' evalin', ...). Así que hazte un favor y evita usarlos cuando no tengas que hacerlo. – Egon

+0

El hecho es que la función mencionada se usa más como script de prueba y en lugar de iniciar la llamada desde la ventana de comandos, quiero llamar a la función directamente desde el editor y ese es el motivo para hacer esta pregunta. ¡Gracias por el consejo! :) – Simon

+1

hay algunas cosas diferentes que puedes hacer. En primer lugar, podría convertirlo en un script en lugar de una función (simplemente omita la 'función ...'). Todas las variables serán parte de su espacio de trabajo base. Por lo tanto, esto puede llegar a estar desordenado y es posible que deba jugar con cosas como 'variables claras; cierra todo; clc; 'por conveniencia. O puede usar la función [ejecutar configuraciones] (http://www.mathworks.cn/help/techdoc/matlab_env/brqxeeu-131.html#brqxeeu-136). Sin embargo, estos son difíciles de controlar en el control de versiones o en diferentes computadoras. Entonces ambos tienen pros y contras. – Egon

Respuesta

11

Es posible, quizás no del todo recomendado. Así es como:

function ExtremePoints = AnalyseData(ScanData) 
if nargin == 0 
    ScanData = evalin('base', 'ScanData'); 
end 
% do stuff 

Esto empuja el valor de ScanDatabase del espacio de trabajo si no hay argumentos de entrada se suministran (nargin == 0).

El uso de eval y evalin generalmente se desaconseja, ya que hace que su código sea más difícil de entender y reutilizar.

Cuestiones relacionadas