主要内容

解析函数输入

这个示例展示了如何定义必需的和可选的输入,将默认值赋给可选的输入,并使用Input Parser验证自定义函数的所有输入。

Input Parser提供了一种一致的方式来验证输入并为输入分配默认值,从而提高了代码的健壮性和可维护性。为了验证输入,您可以利用现有的MATLAB®函数或编写自己的验证例程。

步骤1。定义函数。

在文件中创建一个函数printPhoto.m。的printPhoto函数有一个文件名的必选输入,以及光洁度(光面或哑光)、色彩空间(RGB或CMYK)、宽度和高度的可选输入。

函数printPhoto(文件名,变长度输入宗量)

在函数声明语句中,首先指定所需的输入。使用变长度输入宗量支持可万博1manbetx选输入。

步骤2。创建一个inputParser对象。

在函数中调用inputParser创建一个解析器对象。

p = inputParser;

步骤3。向方案添加输入。

将输入添加到函数中的解析模式中addRequiredaddOptional,或addParameter。对于可选输入,指定默认值。

对于每个输入,您可以指定验证函数的句柄,该函数检查输入并返回一个标量逻辑(真正的)或错误。验证函数可以是现有的MATLAB函数(如ischarisnumeric)或您创建的函数(例如匿名函数或本地函数)。

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)

输入相加addRequiredaddOptional位置参数。当您调用具有位置输入的函数时,请按照添加到解析方案中的顺序指定这些值。

输入加上addParameter不是位置的,所以你可以传递值给高度的值之前或之后宽度。但是,参数值输入要求您传递输入名称(高度宽度)以及输入值。

如果函数接受可选输入字符串或字符向量以及名称-值参数,请为可选输入指定验证函数。否则,Input Parser将可选字符串或字符向量解释为参数名。例如,checkFinish验证函数确保printPhoto解释“时尚”作为的值完成而不是作为无效的参数名。

步骤4。设置属性以调整解析(可选)。

默认情况下,Input Parser会对大小写敏感性、函数名、结构数组输入以及是否允许方案中没有的其他参数名和值进行假设。属性允许您显式地定义行为。使用点表示法设置属性,类似于给结构数组赋值。

允许printPhoto来接受与输入方案不匹配的附加参数值输入KeepUnmatched属性。

p.KeepUnmatched = true;

如果KeepUnmatched(默认),当输入与模式不匹配时,输入解析器会发出错误。

第5步。解析输入。

在函数中调用解析方法。传递所有函数输入的值。

解析(p,文件名,变长度输入宗量{:})

步骤6。使用函数中的输入。

类的这些属性访问已解析的输入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)结束

步骤7。调用你的函数。

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”%名称和值

另请参阅

|

相关的话题