MATLAB对函数输入进行检查(2)——inputParser类

inputParser类的属性和方法

  • addRequire(input, func)

    • 检测输入参数是否满足条件
    • input 为输入参数名称,字符串。
    • func 为检验函数,一般用 @ 引用,可以引用前面的 validateattributes 和 validatestring 函数
  • addOptional(input, defaultinput, func)

    • 可选参数的判断,如果有这个参数,则用 func 验证,若没有,则取值为 defaultinput
  • addParameter(input, defaulyinput, func)

    • 与 addOptional 相似,但是 input 是字符串
    • 即 plot 函数中可调换顺序的部分,其中 input 就是输入的参数名,比如 ‘LineWidth’,指定参数必须以 参数名-参数值 对的形式来赋值。
  • parse(input)

    • 将参数输入,激活检测,将结果传入 Results
  • Results

    • Results 是存入结构体的参数,在前面检测完成后录入。

实例

  • 计算长方形面积函数,保证长和宽是数值
function a = getArea(wd,ht)
	p = inputParser;	% 创建类,省略了()
	p.addRequired('width',@isnumeric);	% 放入 Results 中名称为 width
	p.addRequired('height',@isnumeric);
	p.parse(wd,ht);	% 将参数 wd、ht 传入
	a = p.Results.width * p.Result.height;
end
  • 我们希望可以输入一个参数,计算正方形面积
function a = getArea(width,varargin)
	p = inputParser;
	p.addRequired('width',@isnumeric);
	defaultHeight = width;
	p.addOptional('height',defaultHeight,@isnumeric)
	p.parse(width,varargin{:});	% varargin 必须解出来
	a = p.Results.width*p.Results.height;
end
  • 添加两个默认参数,一个叫‘shape’,可以取 rectangle、square、paralelogram 默认值为 rectangle;一个叫 ‘units’,可以取 cm、m、inches,默认值为 inches
function a = getArea(width,varargin)
	p = inputParser;
	p.addRequired('width',@(x)validateattributes(x,{'numeric'}, ...
		{'nonzero'}));
	p.addOptional('height',width,@(x)validateattributes(x,{'numeric'}, ...
		{'nonezero'}));
	p.addParameter('shape','rectangle',@(x)any(validatestring(x, ...
		{'square','rectangle','paralelogram'})));
	p.addParameter('units','cm',@(x)any(validatestring(x, ...
		{'inches','cm','m'})));
	p.parse(width,varargin{:});
	a.area = p.Results.width*p.Results.height;
	a.shape = p.Results.shape;
	a.units = p.Results.units;
end
  • any 返回逻辑值,如果 validatestring 有匹配,则返回 logical 1,否则返回 logical 0
  • 下面两种调用相同:
    在这里插入图片描述
  • 19
    点赞
  • 45
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值