Подтвердить что ты не робот

Доступ к переменной из другой рабочей области в Matlab?

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

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

Что-то приятное было бы

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

  % ...
end

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

4b9b3361

Ответ 1

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

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

EDIT: как упоминалось Col Heather, вы можете использовать оператор try/catch для обработки ошибок, которые могут быть сгенерированы функцией evalin (в вашем случае, если эта переменная не существует, например), а затем проверьте, переменная имеет правильный тип.

Ответ 2

Проверка переменной, существующей в caller/base, может быть выполнена с помощью:

   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