当MATLAB刷新目录时
多年来,有很多关于MATLAB何时识别文件的问题路径.今天我将讨论用户生成或更新MATLAB代码,然后想要使用它的情况。你要怎么做才能确保MATLAB能看到它?我特别讨论的是用户目录中的用户文件,而不是下面的文件matlabroot.
内容
函数fcnPuzzle ()
注意:我正在做一个实验,通过发布带有子函数的函数,这样您就可以看到带有语法高亮显示的代码,而不是博客代码本身。我希望这最终能起作用并有所帮助。
困惑的密码
看函数fcnBug在这篇文章的底部。一个难题是,如果从调试器运行代码,结果总是预期的结果,但当以通常的方式运行时就不是这样了。我将通过几种不同的方式来演示这个难题。请参见修复版fcnBugRepair遵循bug版本。
显示文件不存在。
存在(“fcnTest.m”,“文件”)
Ans = 0
小谜题。如果我没有在文件存在之前将第一次尝试放入try - catch,我的函数失败与一个错误。但是,如果我把相同的代码放在try - catch时,似乎不会产生错误。今天就让我们忽略这个谜吧。
试一试fcnBug (“C”,“清楚”)抓ignoreException disp (运行前文件不存在时出现错误)结束
只调用写入的原始函数,而不调用更新的版本,假设我们在函数中不做任何其他事情来影响工作空间。
为fcnBug(num2str(d)),“什么”)结束
1问题1问题1问题1问题
在调用函数之前清除该函数会有所帮助。
为fcnBug(num2str(d)),“清楚”)结束
1问题2问题3问题4问题
影响MATLAB查看新函数的另一种方法是询问文件是否存在.
删除fcnTest.m为d = 1:4 fcnBug (num2str (d),“清楚+存在”)结束
1问题2问题3问题4问题
清理。
删除fcnTest.m
解决问题
有一个简单的解决方案来确保新文件被识别。关闭文件后,直接强制MATLAB清除内存中的文件。根据你的情况,你可以用更轻或更重的手来做这件事。简单的清算这个函数就足够了,或者你可以试试重新处理MATLAB知道的文件。
试一试fcnBugRepair (“C”,“清楚”)抓ignoreException disp (运行前文件不存在时出现错误)结束
运行前文件不存在时出错
我来演示一下如何使用修复函数。在前面的情况中,只有最初写入的文件被调用。在这里可以看到,现在执行了每个版本,即使没有做任何额外的事情(除了添加清晰的函数代码中的语句)。
为fcnBugRepair(num2str(d),“什么”)结束
1问题2问题3问题4问题
和以前一样,在执行前清理工作空间仍然有很好的效果。
为fcnBugRepair(num2str(d),“清楚”)结束
1问题2问题3问题4问题
同样,函数存在性的测试也有效。
删除(“fcnTest.m”);为d = 1:4 fcnBugRepair (num2str (d),“清楚+存在”)结束
1问题2问题3问题4问题
清理
删除fcnTest.m
为什么这个解决方案有效?
问题在于文件的时间戳分辨率,在大多数文件系统上只有1秒。由于这是在一个紧密循环中运行,文件fcnTest.m在同一时间内被重写,因此MATLAB无法知道它已经改变了。因此,MATLAB最初继续使用缓存版本。
清晰的迫使MATLAB转储它的缓存,下一次MATLAB运行该函数时,它会从磁盘重新加载它。
的函数存在而且重新处理它们都会使MATLAB注意到文件的变化,因为它们都会刷新“脏”目录。
MATLAB不总是寻找变化的原因是为了性能。文件关闭会通知路径管理器某个目录被更改,但缓存更新不会发生,直到有人显式地刷新目录——刷新可以以我已经讨论过的方式发生,或者在下一个命令提示符发生(这就是为什么它在调试器中工作)。
原始的函数
函数fcnBug(id, mode)
% fcnBug -意外的错误%%% %错误当运行前文件不存在时,% %% fcnBug('C', 'clear')仅“基本工作区1”% %被调用%, d=1:4% fcnBug(num2str(d), 'nothing')%结束%% %清空工作区% %帮助%, d=1:4% fcnBug(num2str(d), 'clear')%结束%% %在创建时没有% delete('fcnTest.m');% fcnBug(num2str(1), 'clear')%% %存在% %似乎告诉MATLAB函数在这里% delete('fcnTest.m');%, d=1:4% fcnBug(num2str(d), 'clear+exist')%结束Fid = fopen(”。\ fcnTest.m ',' w ');流(fid检测器,'function fcnTest(varargin)\ndisp(" %s Problem ")'、身份证);文件关闭(fid);开关低(模式)情况下“清楚+存在”清晰的fcnTest存在(“fcnTest.m”,“文件”);情况下“清楚”清晰的fcnTest情况下“什么”结束fcnTest;
运行前文件不存在时出错
修复功能
函数fcnBugRepair(id, mode)在一个好的位置添加明确的声明修复Fid = fopen(”。\ fcnTest.m ',' w ');流(fid检测器,'function fcnTest(varargin)\ndisp(" %s Problem ")'、身份证);文件关闭(fid);清晰的fcnTest%或者可以在这里使用rehash代替开关低(模式)情况下“清楚+存在”清晰的fcnTest存在(“fcnTest.m”,“文件”);情况下“清楚”清晰的fcnTest情况下“什么”结束fcnTest;
评论
如欲留言,请点击在这里登录您的MathWorks帐户或创建一个新帐户。