由于 MATLAB 中的 try-catch block 没有 finally 子句,我发现自己编写了很多如下代码:
fid = fopen(filename);
if fid==-1
error('Couldn''t open file');
end
try
line = getl(fid);
catch ME
fclose(fid);
rethrow ME;
end
fclose(fid);
我发现 fclose 函数在两个地方丑陋且容易出错。
有更好的方法吗?
最佳答案
我建议查看 ONCLEANUP对象。它们允许您在函数退出时自动运行代码(更具体地说,当从内存中清除 ONCLEANUP 对象时)。 Loren from The MathWorks在她的一篇博文中对此进行了讨论 here .如果将上面的代码放在一个函数中,它可能看起来像这样:
function data = load_line(filename)
data = [];
fid = fopen(filename);
if fid == -1
error('Couldn''t open file');
end
c = onCleanup(@()fclose(fid));
data = getl(fid);
end
即使对 GETL 的调用抛出异常,ONCLEANUP 对象仍会在函数 load_line 返回时从内存中清除,从而确保文件被关闭。
关于matlab - 您如何以异常安全的方式处理 MATLAB 中的资源? (比如 "try ... finally"),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1098149/