从Matlab中的其他工作区访问变量?

时间:2011-12-20 07:42:39

标签: function matlab scope workspace

是否有类似于assignin()的内容来获取存在于另一个工作空间中的变量并将其传递到本地工作空间,例如比如在函数中访问base-workspace变量!?

我目前正在尝试实现的一个例子是:我有一个函数bla(x),它接受​​一个参数。如果未指定x,则该函数应自动使用基本matlab工作空间中存在的x(如果存在x)。

好的东西将是

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

  % ...
end

我知道fetchin()不存在,并且exist()没有采取这样的第二个参数来检查某个工作区! 非常感谢提前!

2 个答案:

答案 0 :(得分:18)

Matlab函数evalin可以做到:

x=evalin('base','x');
编辑:正如Col Heather所提到的,您可以使用try / catch语句来处理函数evalin可能生成的错误(例如,如果变量不存在,则会出现)检查变量是否具有正确的类型。

答案 1 :(得分:2)

检查调用者/基础中存在的变量可以通过以下方式完成:

   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