Matlab:将所有参数传递给函数句柄

时间:2014-01-17 20:51:00

标签: matlab arguments function-handle

我在一系列文件上运行了很多功能。因此,创建一个在文件上运行我的函数而不是在每个文件中重复该过程的函数是合乎逻辑的。问题是每个函数的参数数量是不同的! 所以psudo代码是:

function [out1, out2]=batchDo(@func,adrs,arg1,arg2,...,argn)

files=ls(adrs);
for i=1:length(files)
    raw=load([adrs files(i)]);
    [out1, out2]=func(raw,arg1,arg2,...,argn)
    out1s=out1+out1s;
    out2s=out2+out2s;
end
out1=out1s/length(files);
out2=out2s/length(files);

幸运的是,在我的情况下输出几乎相似,我可以添加一些假人,使它们都相似。但如果无论如何都要以同样的方式解决这些问题,我将不胜感激。

2 个答案:

答案 0 :(得分:1)

如果输入按某种顺序(或可以重新排序),例如:

  • 所有函数都使用参数1到3
  • 带有其他参数的函数按顺序获取它们:arg4到arg8,arg4到arg10等。

然后你可以很简单地通过向每个不使用完整参数集的函数添加varargin,但只代替未使用的参数(就像定义可选参数一样),然后忽略它在实际功能中。所以函数可能是:

function myfunction(raw, arg1, arg2, arg3, arg4, arg5, varargin)

实际上这只使用了arg1 ... arg5而忽略了其他内容。

答案 1 :(得分:0)

Horchler的答案是正确的,如果我只是将varargin作为varargin {:}传递,它会自动提供我需要的东西。 如果你在每个函数中使用varargin,然后尝试解决varargin.arg1而不是arg1,它会减慢代码速度。有许多文章比较了这些表现。