我需要在我的脚本中运行一个脚本,并从该脚本获取所有变量和值到当前脚本而不混合工作空间。虽然我可以编写一个运行脚本并返回我需要的所有内容的函数,但我似乎无法使其工作,下面是我失败的尝试。请帮忙..
fileName是要运行的脚本的名称,而TestCaseNum是fileName所依赖的var,这就是那里的原因
function [a b]=runCalScript(fileName,testCaseNum)
TestCase=0;
TestCase=testCaseNum;
%TestCase=str2num(TestCase);
run(fileName)
a=whos
%whoValues=who;
whosValues=whos;
%fprintf('%s \n',fileName);
save('myFile.mat')
matObj = matfile('myFile.mat');
fname=fieldnames(matObj);
matObj.(fname{1})
%WHY DOESN'T THIS WORK??
% for i=1:length(whosValues)
% %temp=whoValues{i,1};
% temp=evalin('base',whosValues(i).name) %base or caller options don't work!
% end;
% for i=1:size(s,1)
% evalin('base',s{i,1})
% end;
答案 0 :(得分:0)
如果我理解正确,你有
runCalScript
,工作区#2 然后函数也会看到第二个脚本中的变量。我认为您可以查看函数工作空间的每个变量,就像在您的示例中一样,然后使用assignin
在base(= caller)工作空间中重新创建这些变量。像这样:
function [a b]=runCalScript(fileName,testCaseNum)
TestCase=testCaseNum;
run(fileName);
whosValues=whos;
%this should work
for i=1:length(whosValues)
assignin('base',whosValues(i).name,eval(whosValues(i).name));
end
如果您的函数中有一个变量,例如v
,其值为[1 3 5]
,那么一次分配就会说
assignin('base','v',[1 3 5]);
我认为这正是您所需要的:它将在您的基础工作区中评估为v=[1 3 5];
。
更确切地说,这正是您想要实现的目标。你确定需要这个吗?为什么不将变量作为函数的输出参数返回?
更新:您可以将每个变量的值添加到whos
给出的结构中,作为名为val
的新字段(例如):
for i=1:length(whosValues)
whosValues(i).val=eval(whosValues(i).name);
end
然后只需将whosValues
设置为输出参数,将您的函数声明为
function [a b whosValues]=runCalScript(fileName,testCaseNum)