11.9.3解析参数

如果前面的验证函数都不足够,那么还有类inputsparser其可以执行极其复杂的函数输入检查。

 
: p = inputParser ()

创建对象</p>inputsparser类的。

此类的设计目的是允许轻松解析函数参数。该类支持四种类型的参数:

  1. 强制性(详见addRequired);
  2. 可选(详见add可选);
  3. 命名(详见addParameter);
  4. 开关(详见addSwitch).

使用这些方法定义函数API后,可以使用作语法分析方法和使用访问的结果结果访问者。

: inputParser.Parameters

返回已定义的参数名称列表。(只读)

: inputParser.Results

返回一个结构体,其参数名称为字段名称和相应的值。(只读)

: inputParser.Unmatched

返回类似于的结构体结果,但对于未匹配的参数。(只读)详见KeepUnmatch属性

: inputParser.UsingDefaults

返回具有使用默认值的参数名称的元胞数组。(只读)

: inputParser.FunctionName = name

设置要在错误消息中使用的函数名称;默认为空字符串。

: inputParser.CaseSensitive = boolean

设置参数名称的匹配是否应区分大小写;默认为false。

: inputParser.KeepUnmatched = boolean

设置是否解析与任何Parameter不匹配的字符串参数并将其存储在不匹配属性默认为false。如果为false,则在第一个无法识别的参数处将发出错误,分段将停止。请注意,从于转换参数参数可能是混杂的,不可能知道不匹配的参数的类型。Octave假设所有不匹配的参数都属于参数类型,因此必须后跟一个值。

: inputParser.PartialMatching = boolean

设置是否为的参数名称参数转换只要名称唯一地标识了一个参数,就可以以缩写形式给出参数;默认为true。例如,参数选择将匹配一个参数opt_color,但如果还有一个参数,则会失败opt_case.

: inputParser.StructExpand = 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号