有没有办法让 MATLAB 提醒开发人员或警告用户特定函数 m-file 的多个冲突(相同名称)版本存在于当前存在的不同目录中path
?这对于大型协作 MATLAB 项目很有用。
问问题
668 次
2 回答
1
如果您有一个特定的函数名称,您需要检查是否已经存在具有该名称的任何函数,您可以使用函数WHICH。例如,如果我将一个新的函数文件添加test.m
到我的当前目录 ( C:\Program Files\MATLAB\R2010b\bin\
),那么这就是 WHICH 告诉我的:
>> which test -all
C:\Program Files\MATLAB\R2010b\bin\test.m
C:\Program Files\MATLAB\R2010b\toolbox\stats\stats\@classregtree\test.m % classregtree method
C:\Users\user\Documents\MATLAB\test.m % Shadowed
现在调用了三个函数test
:一个是classregtree
对象的类方法,一个是我刚刚创建的函数(顶行),最后一个(底行)现在被我刚刚创建的那个遮住了。这意味着,如果我test
从当前目录调用,将调用第一个目录。如果我切换到另一个目录,我会得到这个:
>> which test -all
C:\Users\user\Documents\MATLAB\test.m
C:\Program Files\MATLAB\R2010b\toolbox\stats\stats\@classregtree\test.m % classregtree method
较新的test
函数现在没有显示,因为以前的目录没有保存在MATLAB path上。先前被遮蔽的test
函数现在将被调用。
于 2012-04-04T20:28:20.610 回答
0
如果您想检查路径中所有可能的冲突,您可以使用File Exchange 中的此功能。
示例用法:
>> [~, collisions] = name_collisions;
Found the following duplicate names:
25 x Contents.m
2 x complex2interleaved.m
2 x demosinit.m
2 x exported_values.mat
2 x gcGuiReport.mat
2 x header.m
2 x interleaved2complex.m
2 x ltfatdiditfail.m
2 x mexinit.m
2 x octinit.m
2 x ref_spreadadj_1.m
2 x signalsinit.m
2 x startup.m
2 x testinginit.m
它还返回一个包含碰撞文件路径的结构。
>> disp(collisions)
51×1 struct array with fields:
name
folder
date
bytes
isdir
datenum
于 2018-04-11T13:01:16.730 回答