MATLAB中如何检查参数数量可变函数的末位参数是否传入?
检查MATLAB函数末位参数是否传入的最优方案
问题背景
现有MATLAB函数定义如下:
function out = fn(a, b, z) end
需求:该函数的参数数量未来可能发生变化,但最后一个参数的名称始终固定为z,需要检查这个末位参数是否被传入。
尝试过的临时方案
使用nargin需要预先知道函数的总参数数,无法适配未来参数数量的变化,因此采用了try-catch的变通写法:
try z catch z = 'whatever'; end
但该方法属于临时 workaround,不够优雅。
最优解法
利用MATLAB内置的arginnames函数动态获取当前函数的输入参数名称列表,结合nargin判断末位参数是否被传入,代码如下:
function out = fn(a, b, z) % 获取当前函数的所有输入参数名称 paramNames = arginnames(mfilename); % 末位参数的索引(即函数定义的总参数数) totalParams = length(paramNames); % 判断末位参数z是否被传入 if nargin < totalParams % 未传入时设置默认值 z = 'whatever'; end % 后续业务逻辑... end
原理说明
arginnames(mfilename)会返回当前函数的输入参数名称组成的元胞数组,无论未来参数数量如何变化,都能动态获取最新的参数列表。- 由于
z始终是末位参数,其对应的索引就是总参数数length(paramNames),通过比较nargin(实际传入的参数数量)和总参数数,即可判断z是否被传入。
备注
已知可通过arguments块结合结构体参数实现类似逻辑,但代码量较大,此处不采用该方案。
内容的提问来源于stack exchange,提问作者OverLordGoldDragon
相关产品推荐
相关产品推荐

