这个示例展示了如何定义必需的和可选的输入,将默认值赋给可选的输入,并使用Input Parser验证自定义函数的所有输入。
Input Parser提供了一种一致的方式来验证输入并为输入分配默认值,从而提高了代码的健壮性和可维护性。为了验证输入,您可以利用现有的MATLAB®函数或编写自己的验证例程。
在文件中创建一个函数printPhoto.m
。的printPhoto
函数有一个文件名的必选输入,以及光洁度(光面或哑光)、色彩空间(RGB或CMYK)、宽度和高度的可选输入。
函数printPhoto(文件名,变长度输入宗量)
在函数声明语句中,首先指定所需的输入。使用变长度输入宗量
支持可万博1manbetx选输入。
在函数中调用inputParser
创建一个解析器对象。
p = inputParser;
将输入添加到函数中的解析模式中addRequired
,addOptional
,或addParameter
。对于可选输入,指定默认值。
对于每个输入,您可以指定验证函数的句柄,该函数检查输入并返回一个标量逻辑(真正的
或假
)或错误。验证函数可以是现有的MATLAB函数(如ischar
或isnumeric
)或您创建的函数(例如匿名函数或本地函数)。
在printPhoto
函数,文件名
是必需的输入。定义完成
和颜色
作为可选输入,和宽度
和高度
作为可选参数值对。
defaultFinish =“时尚”;validfinished = {“时尚”,“无光”};checkFinish = @(x) any(validatestring(x, validfinish));defaultColor =“RGB”;validColors = {“RGB”,“CMYK”};checkColor = @(x) any(validatestring(x,validColors));defaultWidth = 6;defaultHeight = 4;addRequired (p,“文件名”, @ischar);addOptional (p,“完成”、defaultFinish checkFinish) addOptional (p,“颜色”、defaultColor checkColor) addParameter (p,“宽度”、defaultWidth @isnumeric) addParameter (p,“高度”、defaultHeight @isnumeric)
输入相加addRequired
或addOptional
是位置参数。当您调用具有位置输入的函数时,请按照添加到解析方案中的顺序指定这些值。
输入加上addParameter
不是位置的,所以你可以传递值给高度
的值之前或之后宽度
。但是,参数值输入要求您传递输入名称(高度
或宽度
)以及输入值。
如果函数接受可选输入字符串或字符向量以及名称-值参数,请为可选输入指定验证函数。否则,Input Parser将可选字符串或字符向量解释为参数名。例如,checkFinish
验证函数确保printPhoto
解释“时尚”
作为的值完成
而不是作为无效的参数名。
默认情况下,Input Parser会对大小写敏感性、函数名、结构数组输入以及是否允许方案中没有的其他参数名和值进行假设。属性允许您显式地定义行为。使用点表示法设置属性,类似于给结构数组赋值。
允许printPhoto
来接受与输入方案不匹配的附加参数值输入KeepUnmatched
属性。
p.KeepUnmatched = true;
如果KeepUnmatched
是假
(默认),当输入与模式不匹配时,输入解析器会发出错误。
在函数中调用解析
方法。传递所有函数输入的值。
解析(p,文件名,变长度输入宗量{:})
类的这些属性访问已解析的输入inputParser
对象:
结果
—包含方案中所有输入的名称和值的结构数组。
无与伦比的
—包含传递给函数但不在方案中的参数名称和值的结构数组(当KeepUnmatched
是真正的
).
UsingDefaults
-单元格数组具有可选输入的名称,这些可选输入被分配为默认值,因为它们没有传递给函数。
在printPhoto
函数,显示一些输入的值:
disp ([“文件名:”, p.Results.filename]) disp ([的完成:, p.Results.finish])如果~ isempty(字段名(p.Unmatched)) disp (的额外的输入:) disp (p.Unmatched)结束如果~ isempty (p.UsingDefaults) disp (使用默认值:) disp (p.UsingDefaults)结束
Input Parser期望接收如下输入:
首先是必需的输入,按照它们添加到解析模式的顺序addRequired
。
可选的位置输入,按照它们被添加到方案中的顺序addOptional
。
在参数名称和值对输入之前的位置输入。
表单中的参数名称和值Name1, Value1,…,的家
。
将几个输入组合传递给printPhoto
,有些有效,有些无效:
printPhoto (“myfile.jpg”)
使用默认值:' Finish ' 'color' 'width' 'height'
printPhoto (100)
使用printPhoto出错(第23行)'filename'的值无效。它必须满足:ischar函数。
printPhoto (“myfile.jpg”,缎的)
使用printPhoto出错(第23行)'finish'的值无效。期望输入匹配以下字符串之一:'glossy', 'matte'。输入'satin'没有匹配任何有效字符串。
printPhoto (“myfile.jpg”身高= 10,宽度= 8)
文件名称:myfile.jpg完成:glossy使用默认值:' Finish ' 'color'
在R2021a之前使用名称-值参数时,将名称作为字符串或字符向量传递,并用逗号分隔名称和值。例如:
printPhoto (“myfile.jpg”,“高度”10“宽度”, 8)
方法传递一个值n位置输入,可以指定前面(n- 1)输入或传递输入作为参数名称和值对。例如,这些函数调用将相同的值赋给完成
(默认“时尚”
),颜色
:
printPhoto (“myfile.gif”,“时尚”,“CMYK”)%位置printPhoto (“myfile.gif”颜色=“CMYK”)%名称和值