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

Function 从Matlab中的其他工作区访问变量?,function,matlab,scope,workspace,Function,Matlab,Scope,Workspace,是否有类似于assignin()的方法来获取另一个工作区中存在的变量并将其获取到本地工作区,例如访问函数中的基本工作区变量 我目前试图实现的一个例子是:我有一个函数bla(x),它接受一个参数。未指定x时,函数应自动使用基本matlab工作区中存在的x(如果存在x) 好东西 function bla(x) if(nargin == 0 && exist('x', 'base', 'var')) x = fetchin('base', 'x'); end %

是否有类似于
assignin()
的方法来获取另一个工作区中存在的变量并将其获取到本地工作区,例如访问函数中的基本工作区变量

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

好东西

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

  % ...
end
我知道
fetchin()
不存在,而且
exist()
不需要第二个参数来检查某个工作区! 提前多谢

Matlab函数可以做到这一点:

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

编辑:正如Col Heather所提到的,您可以使用try/catch语句来处理函数
evalin
(例如,在您的情况下,如果变量不存在)可能生成的错误,然后检查变量的类型是否正确。

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

   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

啊,这就是“执行表达式”的意思。我以为这只是为了计算,但你是对的!调用表达式
x
只给出
x
的值。谢谢上述方法是否可以简化用户对函数的调用,但仍然可以让用户传递自己的值(以防需要从其他地方调用)?没有
x
时会发生什么?在调用
evalin
之前如何检查这个问题?如果您用户的
x
没有被调用
x
,该怎么办?我确保:-)为了摆脱存在性检查,我想到了简单地使用
if(nargin==0),试试,x=evalin('base','x');catch err,error('工作区变量x必须存在,或者需要将x传递给函数');结束,结束