matlab中inputparser,MATLAB:使用inputParser与varargin

在MATLAB中,使用inputParser可以确保函数的输入参数合理,但当结合varargin使用时,如何处理未命名的必需参数成为一个问题。示例函数myFunc展示了如何定义必需和可选参数,但正常的varargin调用方式不适用。文章探讨了如何优雅地实现功能,使得必需参数可以不被明确命名并与其他可选参数一起传递。

我有一个函数,我想通过varargin传递参数,并使用inputParser来确保输入是合理的。有些论据是必需的,有些则不是。这里是一个例子:MATLAB:使用inputParser与varargin

function myFunc(varargin)

p = inputParser;

p.addRequired(...

'numStates', ...

@(x) validateattributes(x, {'numeric'}, ...

{'scalar', 'integer', 'positive'}));

p.addRequired(...

'numInps', ...

@(x) validateattributes(x, {'numeric'}, ...

{'scalar', 'integer', 'positive'}));

p.addRequired(...

'numOuts', ...

@(x) validateattributes(x, {'numeric'}, ...

{'scalar', 'integer', 'positive'}));

p.addRequired(...

'X0', ...

@(x) validateattributes(x, {'numeric'}, ...

{'vector'}));

p.addOptional(...

'freq', 10, ...

@(x) validateattributes(x, {'numeric'}, ...

{'scalar', 'integer', 'positive'}));

p.addOptional(...

'SimulinkVariables', struct(), ...

@(x) isa(x, 'struct'));

p.parse(varargin{:});

%# do stuff with variables

end

我想能够通过参数如下;只要所需的那一对在那里,哪一对都可以通过。因此,示例调用可能是:

myFunc('numStates', 4, 'numInps', 2, 'numOUts', 3, 'X0', [4;0]);

显然,该语法是非法的; parse()预计,它的第一个参数是必需的价值观,但他们不应该被明确命名,即,如:

function myFunc(numStates, numInps, numOuts, X0, varargin)

...

p.parse(numStates, numInps, numOuts, X0, varargin{:});

end

有一个简单的方法,使这个做我想做的,即第一功能?我想最简单的做法是做一些事情来重新排序varargin的元素,并剔除参数名称,但这不是非常优雅。

+1

您正在使用inputParser错误。请参阅@ yuk的答案。 –

2012-02-16 13:36:08

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值