实现MATLAB匿名函数重载

本文介绍了一种在MATLAB中实现匿名函数重载的方法,通过调整输入参数处理方式及使用cell类型变量来达到根据不同输入数量执行不同函数的目的,并提供了一个示例程序。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前段时间遇到一个问题,如何实现匿名函数重载,四处求解未果。。。然后自己研究出了解决方法,还是自己动手,丰衣足食啊。。。
我的方法不算是真正的重载,不过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型数据,这个程序就会出现问题,不过本身匿名函数重载这种事之前就没听说过,应该没什么需求,就不赘述了。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值