实现MATLAB匿名函数重载

来源:互联网 发布:淘宝如何卖高仿耐克鞋 编辑:程序博客网 时间:2024/05/14 17:42
前段时间遇到一个问题,如何实现匿名函数重载,四处求解未果。。。然后自己研究出了解决方法,还是自己动手,丰衣足食啊。。。
我的方法不算是真正的重载,不过MATLAB的函数重载本身就不算是真正的重载,能用就行。
当时举的例子是
  1. 比如我有一个多输入单输出的重载函数out1 = overloaded_fun(varargin);
  2. 和一个单输入单输出的函数out2 = common_fun(input);
  3. 现在我想利用匿名函数创造一个多输入单输出重载函数out = target_fun(varargin);
  4. 相当于out = common_fun( overloaded_fun(varargin) );
  5. 也就是说能否创造一个句柄target_handle = @(varargin)( common_fun( overloaded_fun(varargin) ) ); 其中varargin可以是数目不确定的多变量。
复制代码
这是可以实现的,方法是在定义重载函数overloaded_fun的时候,在前面加一句
  1. if iscell(varargin{1})
  2.     varargin = varargin{1};
  3. end
复制代码
在判断输入变量数量的时候不使用
  1. if nargin==n
复制代码
换成
  1. if length(varargin)==n
复制代码
这样定义匿名函数
  1. target_handle = @(x)( common_fun( overloaded_fun(x) ) );
复制代码
调用的时候跟一般函数有点不一样,需要这样调用
  1. output = target_handle({input1 , input2...})
复制代码

这样就实现了匿名函数的重载。

可能看起来比较难以理解,我制作了一个例程,感兴趣的可以下载运行试试。

下载链接: https://pan.baidu.com/s/1c2Ci3hI 密码: upfv

当然如果重载函数的第一个输入变量是cell型数据,这个程序就会出现问题,不过本身匿名函数重载这种事之前就没听说过,应该没什么需求,就不赘述了。


原创粉丝点击