Labfans是一个针对大学生、工程师和科研工作者的技术社区。 论坛首页 | 联系我们(Contact Us)
MATLAB爱好者论坛-LabFans.com
返回   MATLAB爱好者论坛-LabFans.com > 其它 > 资料存档
资料存档 资料存档
回复
 
主题工具 显示模式
旧 2019-12-10, 16:49   #1
poster
高级会员
 
注册日期: 2019-11-21
帖子: 3,006
声望力: 66
poster 正向着好的方向发展
帖子 您如何以异常安全的方式处理MATLAB中的资源? (例如“终于尝试...”)

由于在MATLAB中的try-catch块中没有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对象时)。 洛伦来自MathWorks讨论这个在她的一个博客文章在这里 。如果将上面的代码放在一个函数中,它可能看起来像这样:

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的调用引发异常,在从函数load_line返回时,仍将从内存中清除ONCLEANUP对象,从而确保关闭文件。



更多&回答...
poster 当前离线   回复时引用此帖
回复

主题工具
显示模式

发帖规则
不可以发表新主题
不可以发表回复
不可以上传附件
不可以编辑自己的帖子

启用 BB 代码
论坛禁用 表情符号
论坛启用 [IMG] 代码
论坛启用 HTML 代码



所有时间均为北京时间。现在的时间是 23:44


Powered by vBulletin
版权所有 ©2000 - 2025,Jelsoft Enterprises Ltd.