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传递给函数');结束,结束