如果前面的验证函数都不足够,那么还有类inputsparser
其可以执行极其复杂的函数输入检查。
p =
inputParser ()
¶创建对象</p>inputsparser类的。
此类的设计目的是允许轻松解析函数参数。该类支持四种类型的参数:
addRequired
);add可选
);addParameter
);addSwitch
).使用这些方法定义函数API后,可以使用作语法分析
方法和使用访问的结果结果
访问者。
返回已定义的参数名称列表。(只读)
返回一个结构体,其参数名称为字段名称和相应的值。(只读)
返回类似于的结构体结果
,但对于未匹配的参数。(只读)详见KeepUnmatch
属性
返回具有使用默认值的参数名称的元胞数组。(只读)
= name
¶设置要在错误消息中使用的函数名称;默认为空字符串。
= boolean
¶设置参数名称的匹配是否应区分大小写;默认为false。
= boolean
¶设置是否解析与任何Parameter不匹配的字符串参数并将其存储在不匹配
属性默认为false。如果为false,则在第一个无法识别的参数处将发出错误,分段将停止。请注意,从于转换
和参数
参数可能是混杂的,不可能知道不匹配的参数的类型。Octave假设所有不匹配的参数都属于参数
类型,因此必须后跟一个值。
= boolean
¶设置是否为的参数名称参数
和转换
只要名称唯一地标识了一个参数,就可以以缩写形式给出参数;默认为true。例如,参数选择
将匹配一个参数opt_color
,但如果还有一个参数,则会失败opt_case
.
= boolean
¶设置传递给函数的结构体是否扩展为参数/值对(parameter=fieldname);默认为true。
以下示例显示了如何使用此类:
函数检查(varargin)p=inputsparser();#create object p.FunctionName=“check”;#set函数名p.addRequired(“pack”,@ischar);#强制参数p.addOptional(“path”,pwd(),@ischar);#可选参数##为验证器创建匿名函数句柄valid_vec=@(x)isvector(x)&&all(x>=0)&&all(x<=1);p.add可选(“vec”,[0],valid_vec);##创建两个类型为“Parameter”vld_type=@(x)any(strcmp(x,{“linear”,“quadratic”})的参数;p.addParameter(“type”、“linear”、vld_type);vld_tol=@(x)any(strcmp(x,{“低”,“中”,“高”});p.addParameter(“容差”、“低”、vld_tol);##创建参数p.addSwitch(“verbose”)的开关类型;p.sparse(varargin{:});#对输入运行创建的解析器##函数的其余部分可以使用p.Results访问输入。##例如,使用p.Results.toleranceendfunction获取公差输入
检查(“机械”);#有效,对其他参数使用默认值check();#错误,一个参数是强制检查(1);#错误,因为!ischareck(“mech”,“~/dev”);#有效,对其他参数使用默认值check(“mech”、“~/dev”、[0 1 0 0]、“type”、“linear”);#下面的有效##也是有效的。请注意Switch参数类型如何##与Parameter参数类型混合在一起或混合在其之前(但它##仍必须出现在任何可选参数之后)。check(“mech”、“~/dev”、[0 1 0 0]、“verbose”、“tolerance”、“high”);##following返回一个错误,因为在Parameter参数'type'.check(“mech”,“type”,“linear”,“~/dev”)之后给出了可选参数'path',##;
注1:一个函数可以有四种API类型的任何混合,但它们必须以特定的顺序出现。要求的
参数必须是第一位的,任何参数都可以紧随其后可选择的
参数。Onlyth参数
和转换
参数可以混合在一起,并且它们必须出现在前两种类型之后。
注2:如果两者都有可选择的
和参数
参数混合在函数API中,一旦字符串可选参数未能验证,它将被视为可选择的
参数。将剩余的参数与任何参数
或转换
参数。
版权所有 © 2024 Octave中文网
ICP备案/许可证号:黑ICP备2024030411号