【发布时间】:2013-11-29 09:03:56
【问题描述】:
我有一个脚本可能由于运行时间过长而中止并稍后继续。让我们假设它看起来有点像这样:
data = []; % can't preallocate as I don't know the number of entries yet here...
while(1)
% ...
data = [data; someNewEntry];
end
它的好处是,当作为脚本运行时,每当我中止它时,我的工作区中有变量 data。
但我想将它转换成一个函数,因为该脚本包含大量变量,并且用它弄乱了我的工作空间。假设我现在这样转换它:
function data = myFnc()
data = []; % can't preallocate as I don't know the number of entries yet here...
while(1)
% ...
data = [data; someNewEntry];
end
现在的问题是:当我中止函数时,我将丢失 data 中的所有条目。如何解决这个问题并在中止函数时返回当前向量data?我想出的唯一可能的解决方案是在 for 循环中使用这样的东西:
if(nargout == 1)
assignin('caller','data', data);
end
但不知何故,我不太喜欢这种方法。但好吧,我觉得没问题。但是有一件事仍然让我烦恼:使用它时,我总是将数据分配给工作区变量data,因为我不知道如何获取调用者的输出变量的名称(即bla = myFnc() ->它将是bla,因此是assignin('caller','bla', data);)。我知道有 matlab 函数 inputnames() 但我找不到输出变量的等效函数。
提前非常感谢!
【问题讨论】:
-
旁注,例如,如果
someNewEntry是一个标量。您可以通过以下方式更有效地发展data:data(end+1) = someNewEntry -
谢谢你,但它实际上是一个构建数据矩阵的向量 :) 但还是很高兴知道
-
在这种情况下,它将是
data(end+1,:) = someNewEntry。 -
哦不知道这样更快,谢谢!
标签: matlab function return-value workspace