使用给定数量的输入参数创建函数

Create function with given number of input arguments

情况如下: 我需要创建一个函数,该函数采用 CONSTANT 输入长度(即 nargin(fun)>=0)的函数句柄 fun,对输入进行一些转换,然后然后调用 fun。 伪代码:

function g = transformFun(fun)
n = nargin(fun);
g = @(v_1, ..., v_n) ...
%           ^ NOT REAL MATLAB - THE MAIN PROBLEM
    fun(someCalculationsWithSameSizeOfOutput(v_1,...v_n){:});
% CAN BE ACHIEVED WITH TEMPORARY CELL IN HELPER FUNCTION ^
end

现在的问题是:输出函数的句柄 (g = transformFun(concreteFun)) 然后被传递给依赖于函数具有恒定长度这一事实的其他代码(假设 nargin(g)>=0),因此是一个变量-input-length 函数不可接受("easy" 解决方案)。

这个转换是用许多函数调用的,每个函数都有可能的参数数量(n 是无界的),所以覆盖有限数量的可能性也是不可能的。

有没有(简单的?)方法可以做到这一点?

[我在互联网上搜索了几个小时,只能想出一个涉及已弃用的 inline 函数的令人讨厌的黑客攻击,我无法实现;也许我用错了术语。

所以通常你可以使用 varargin 来处理这种事情,但是因为你需要 nargin(g) 到 return actual 数字输入有点棘手。

您可以使用 str2func 将匿名函数创建为字符串,然后将其转换为函数句柄。

% Create a list or arguments: x1, x2, x3, x4, ...
args = sprintf('x%d,', 1:nargin(func));
args(end) = '';

% Place these arguments into a string which indicates the function call
str = sprintf('@(%s)fun(someCalculationsWithSameSizeOfOutput(%s))', args, args);

% Now create an anonymous function from this string
g = str2func(str);

基于上面的暴行,可能值得考虑一种处理函数句柄的替代方法。