2011-12-20 26 views
12

¿Hay algo similar a assignin() para recuperar una variable que existe en otro espacio de trabajo y llevarla al espacio de trabajo local, p. como acceder a una variable de espacio de trabajo base en una función !?¿Variable de acceso desde otro espacio de trabajo en Matlab?

Un ejemplo que estoy tratando de lograr es: Tengo una función bla(x) que toma un parámetro. Cuando no se especifica x, la función debe usar automáticamente el x que existe en el espacio de trabajo base de matlab (si hay un x).

algo agradable sería

function bla(x) 
    if(nargin == 0 && exist('x', 'base', 'var')) 
    x = fetchin('base', 'x'); 
    end 

    % ... 
end 

Sé que fetchin() no existe y que doesn exist() # t toma un segundo parámetro tal de comprobar en un determinado espacio de trabajo! ¡Muchas gracias de antemano!

Respuesta

18

La función de Matlab evalin puede hacer eso:

x=evalin('base','x'); 

EDIT: Como lo mencionan en Col Heather, se puede utilizar una sentencia try/catch para controlar los errores que podrían ser generados por la función evalin (en su caso si la variable no existe, por ejemplo) y luego verificar si la variable tiene el tipo correcto.

+0

Ahh eso es lo que entiende por 'ejecutar la expresión'. Pensé que esto sería solo para cálculos, pero sí, tienes razón. Llamar a la expresión 'x' solo da los valores de' x'. Gracias. ¿Es lo anterior un buen enfoque para simplificar la llamada de la función para el usuario, pero todavía le da la posibilidad de pasar sus propios valores (por si acaso necesita llamar desde otro lugar)? ¿Qué sucede cuando NO hay 'x'? ¿Cómo verificar esto antes de llamar a 'evalin'? – tim

+1

¿Qué pasa si la 'x' de su usuario no se llama' x'? –

+1

Me aseguro de eso :-) Para deshacerme del control de la existencia, se me ocurrió la idea de simplemente usar 'if (nargin == 0), try, x = evalin ('base', 'x'); catch err, error ('O el espacio de trabajo var x debe existir, o debe pasar x a la función'); fin, fin – tim

2

Comprobación de los existentes variable en la persona que llama/base se puede hacer a través de:

existStr=sprintf('exist(''%s'', ''var'')==1', varNames{iVar}); % verify variable exists 
    isVarExist=evalin(ws, existStr); 
    if isVarExist 
     valVar=evalin(ws, varNames{iVar}); 
    else 
     valVar=[]; 
    end 
Cuestiones relacionadas