2011-12-20 10 views
12

Esiste qualcosa di simile a assignin() per recuperare una variabile che esiste in un altro spazio di lavoro e portarla nello spazio di lavoro locale, ad es. come accedere a una variabile di base-workspace in una funzione !?Variabile di accesso da altro spazio di lavoro in Matlab?

Un esempio che sto attualmente cercando di ottenere è: ho una funzione bla(x) che accetta un parametro. Se non si specifica x, la funzione dovrebbe utilizzare automaticamente lo x che esiste nell'area di lavoro matlab di base (se c'è un x).

Qualcosa di bello sarebbe

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

    % ... 
end 

So che fetchin() non esiste e che exist() # doesn t prendere un secondo parametro, ad esempio per controllare in un certo spazio di lavoro! Grazie mille in anticipo!

risposta

18

La funzione Matlab evalin può farlo:

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

EDIT: Come menzionati da Col Heather, è possibile utilizzare un blocco try/catch per gestire gli errori che potrebbero essere generati dalla funzione evalin (nella tua caso se la variabile non esiste ad esempio) e quindi verificare se la variabile ha il tipo corretto.

+0

Ahh che è ciò che intende con 'eseguire l'espressione'. Pensavo che sarebbe stato solo per i calcoli, ma sì hai ragione! Chiamare l'espressione 'x' dà solo i valori di' x'. Grazie. Questo è un buon approccio per semplificare la chiamata della funzione per l'utente, ma gli dà comunque la possibilità di trasmettere i propri valori (nel caso in cui abbia bisogno di chiamarlo da un'altra parte)? Cosa succede quando non c'è NO x? Come controllare questo prima di chiamare 'evalin'? – tim

+1

Cosa succede se il tuo 'x' dell'utente non è chiamato' x'? –

+1

Mi assicuro che :-) Per sbarazzarsi dell'esistenza-controllo mi è venuta l'idea di usare semplicemente 'if (nargin == 0), prova, x = evalin ('base', 'x'); catch err, error ('O l'area di lavoro var x deve esistere, o è necessario passare x alla funzione'); fine, fine' – tim

2

Verifica del esistenti variabile chiamante/base può essere fatto attraverso:

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