2

我有几个 MatLab 函数,几乎所有函数都有测试函数。现在还没有真正的测试函数命名约定,所以我最终得到了像test_functionName, tests_functionName,FunctionName_Test等这样的函数。

但是,我看到这些功能有两个共同点:

  • 该名称包含“测试”(不同的大小写)。
  • 它们没有输入或输出参数。

我想编写一个函数,它会在给定文件夹下(或在 PATH 中)找到尊重这两个条件并执行它们的所有函数。这样我就可以在一次调用中执行我所有的测试功能。

有什么办法可以做到吗?

4

2 回答 2

3

您可以执行以下操作:

fun=dir('*test*.m'); %% look for matlab scripts which name contains 'test'
fun={fun.name};      %% extract their names
fun=fun(cellfun(@(x) (nargin(x)==0),fun)); %% select the ones with no input arguments
fun = regexprep(fun, '.m', ''); % remove '.m' from the filenames
cellfun(@eval,fun); %% execute them
于 2012-10-05T18:49:12.457 回答
1

首先,获取文件夹下的所有文件:

    d = dir(myFolder);

删除扩展名不是的那些.m

   indexes = strcmp('.m',{d.ext});
   d(indexes) = [];

然后,收集他们所有的名字:

   fileNames = {d.Name};

检查哪一个以测试开始或结束:

   testPrefix = strncmp('test',fileNames)
   testPostfix = %# Left as an exercise to the reader
   sutiableFileNames = fileNames( testPrefix | testPostfix);

现在您可以使用 `nargin' 检查参数的数量:

   numOfInParams  = cellfun(@nargin,sutiableFileNames);
   numOfOutParams = cellfun(@nargout,sutiableFileNames);

然后再次过滤(我想你已经明白了)

于 2012-10-05T18:49:04.873 回答