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

时间:2016-12-02 14:15:23

标签: matlab function function-handle

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

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是无界的),因此也无法覆盖有限数量的可能性。

是否有(简单的?)方法来实现这一目标?

[我在互联网上搜索了几个小时,只能提出一个令人讨厌的黑客,其中涉及被弃用的n功能,我无法工作;也许我的术语错误了。

1 个答案:

答案 0 :(得分:4)

通常你可以使用varargin来处理这类事情,但由于你需要nargin(g)来返回实际的输入数量,所以它有点棘手。

您可以使用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);

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