Доступ к переменной из другого рабочего пространства в Matlab? - PullRequest
12 голосов
/ 20 декабря 2011

Есть ли что-то похожее на assignin() для извлечения переменной, которая существует в другом рабочем пространстве, и передачи ее в локальное рабочее пространство, например, как доступ к переменной базовой рабочей области в функции!?

Один пример, который я сейчас пытаюсь найти: у меня есть функция bla(x), которая принимает один параметр. Если x не указано, функция должна автоматически использовать x, который существует в базовом рабочем пространстве Matlab (если есть x).

Что-то хорошее было бы

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

  % ...
end

Я знаю, что fetchin() не существует и что exist() не принимает такой второй параметр для проверки в определенной рабочей области! Заранее большое спасибо!

Ответы [ 2 ]

18 голосов
/ 20 декабря 2011

Функция Matlab evalin может сделать это:

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

РЕДАКТИРОВАТЬ: Как упоминалось Col Heather, вы можете использовать оператор try / catch для обработки ошибок, которые могутсгенерироваться функцией evalin (в вашем случае, если переменная не существует, например), а затем проверить, имеет ли переменная правильный тип.

2 голосов
/ 17 августа 2014

Проверка наличия переменной в вызывающем абоненте / базе может быть выполнена с помощью:

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