gpt4 book ai didi

matlab - 您如何以异常安全的方式处理 MATLAB 中的资源? (比如 "try ... finally")

转载 作者:太空宇宙 更新时间:2023-11-03 19:06:20 24 4
gpt4 key购买 nike

由于 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com