1

有没有办法让 MATLAB 提醒开发人员或警告用户特定函数 m-file 的多个冲突(相同名称)版本存在于当前存在的不同目录中path?这对于大型协作 MATLAB 项目很有用。

4

2 回答 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 回答