函数参数验证
介绍参数验证
函数参数验证是一种声明特定的函数参数的限制。使用参数验证可以限制类,大小,和其他方面的参数,无需编写代码的主体功能来执行这些测试。
函数参数验证是声明性,使MATLAB®桌面工具来提取信息函数通过检查特定的代码块。通过声明要求参数,您可以消除繁琐的实参的检查代码,提高可读性,代码的健壮性和可维护性。
定义的函数参数验证语法简化了过程可选的,重复的,名称参数。语法还使您能够以一致的方式定义默认值。
使用参数验证在哪里
使用函数参数在函数定义中验证是可选的。参数验证是最有用的功能,可以被任何代码之前,必须确定参数的有效性执行该函数的代码。设计供他人使用的函数参数可以受益于适当的水平的限制和机会返回特定错误消息基于参数验证检查。
不需要验证在哪里
在地方和私有函数,在私有或受保护的方法,调用者知道输入要求,所以这些类型的函数可以被称为有效论证。
验证是不允许的在哪里
你不能使用参数验证语法在嵌套函数,抽象方法,或者处理类析构函数方法。在参数验证方法的更多信息,看一下方法的语法。
参数
块语法
函数定义在可选参数验证代码块分隔的关键词参数
和结束
。如果使用,一个参数
块必须开始之前第一个可执行的函数。
您可以使用多个参数
块在一个函数中,但是必须发生在任何代码块的一部分参数
块。
下面的代码中突出显示的区域显示了输入参数的语法验证。
函数参数声明可以包括任何种类的限制:
大小,每个维度的长度,括在括号里
一个MATLAB类的类的名称
函数——一个以逗号分隔的验证函数,包含在括号
您还可以定义一个默认值输入参数的函数验证声明的参数。默认值必须满足的宣布限制参数。
大小
验证大小的尺寸参数,指定的非负整数数字或冒号(:
)。一个冒号表明任何尺寸的长度是允许的。你不能使用表达式维度。函数调用中的参数所指定的值必须符合指定的大小,或MATLAB抛出一个错误。
MATLAB索引分配规则适用于大小规格。例如,一个兼容的大小指定为1×1值(5,3)
由于MATLAB应用标量扩张。同时,MATLAB row-column转换适用于指定为这样一个大小(:1)
可以接受1)×(n, n×1的大小。
下面是一些例子:
(1,1)
——输入必须完全1×1。(3)
第一个维度必须3,第二个维度可以是任何值。
如果你不指定大小,那么任何尺寸是允许的,除非受到验证功能。
类
验证类是一个类的名称。函数输入必须的值分配给指定的类或可兑换指定的类。使用MATLAB类或外部定义的类,由MATLAB支持,除了Java, COM类,以及不使用MATLAB类定义金宝appclassdef
关键字(MATLAB软件7.6版本之前定义的类)。
下面是一些例子:
字符
——输入必须的类字符
或MATLAB可以转换为一个值字符
,如字符串
。双
——输入可以是一个数值的精度。细胞
——输入必须单元阵列。一个用户定义的类
如果你不指定一个类,然后允许任何类,除非受到验证函数。
验证功能
验证函数是一个MATLAB函数将抛出一个错误如果某些参数值不满意的需求。验证函数不返回值,与类和大小不同,不能改变参数的值验证。
在验证过程中,MATLAB将参数值传递给每个验证函数列的论点。值传递到验证功能是任何转换的结果由类和尺寸规格。MATLAB调用每个函数从左至右,遇到的第一个错误。
预定义的表验证功能,请参阅参数验证功能。
默认值
一个输入参数默认值可以是任何常数或表达满足大小、类,和验证功能的需求。指定一个默认值的参数声明使参数可选的。MATLAB使用默认值时,参数不包括在函数调用。默认值表达式是评估每一次使用的是默认的。
请注意
由于MATLAB验证默认值只有在函数被调用时没有值参数,一个无效的默认值会导致一个错误只有在函数被调用时没有这种说法。
可选参数必须定位在所需参数和函数签名参数
块。可选参数的更多信息,请参阅必需和可选位置参数。
验证序列
参数中从上到下进行验证参数
块。MATLAB验证每个参数声明的一部分,在一个特定的顺序。首先验证了类,那么大小。类和大小的结果验证传递给验证功能。每个步骤是可选的取决于类,大小和验证函数的参数声明。
有关更多信息,请参见的参数验证
转换声明类和大小
两类验证和尺寸验证可以改变一个参数的值。这里有一些例子MATLAB可以执行的转换。
为了满足类限制:
一个
字符
可以转换为一个值字符串
价值。一个
单
可以转换为一个值双
。
为了满足大小限制:
标量可以改变输入大小从标量nonscalar扩张。
一个列向量可以转化成一个行向量。
结果,验证值在函数体可以通过调用函数时不同的价值。有关类转换的更多信息,请参阅隐式类转换。为了避免类和大小转换验证期间,使用参数验证功能。有关更多信息,请参见避免类和大小转换。
输出参数验证
从R2022b、参数验证可以使用输出参数。类似于输入参数,您可以验证的类和大小输出参数和验证函数也适用。然而,您不能为输出参数指定的默认值或引用先前声明的参数。输出参数验证一直是可选的。增加输出参数验证也有助于提高代码的可读性,并保持一致的输出代码可能随时间改变。
单独的参数
块必须用于验证输入和输出参数。块定义的类型参数(输入)
或(输出)
后参数
声明。如果两个(输入)
和(输出)
参数块使用(输出)
块必须遵守(输入)
块。如果没有指定类型,那么MATLAB假定块包含输入参数。
有关更多信息,请参见参数
。
论点的例子验证
基本参数验证
这参数
块指定的大小和类三个输入框。
函数= myFunction (A, B, C)参数一个(1,1)字符串B(:1)增加一倍C(2,2)细胞结束%函数代码…结束
在这个函数中,变量必须满足这些验证需求:
一个
是一个字符串标量。B
是一个1-by-any长度向量双打。C
是一个2×2单元阵列。
值转换
下面的函数说明了如何转换为输入匹配中指定的类参数
块。的SpeedEnum
类是一个枚举类定义创建第三个参数允许的值。
函数forwardSpeed (a, b, c)参数一个双b字符cSpeedEnum结束%函数代码disp(类(a)) disp(类(b)) disp(类(c))结束
这是枚举类。
classdefSpeedEnum < int32枚举完整的一半(100)(50)停止(0)结束结束
这个调用MATLAB的函数使用输入值可以转换为声明的类型。函数内的实际参数类型显示为输出。
forwardSpeed (int8 (4),“字符串”,“全部”)
双字符SpeedEnum
特定的限制使用验证函数
在更具体的方面验证功能可以限制参数。您可以使用预定义的验证函数对于许多常见类型的验证,你可以定义自己的验证函数来满足特定需求。
例如,使用这个函数指定以下验证mustBeNumeric
,mustBeReal
,mustBeMember
本地函数mustBeEqualSize
。
输入
x
必须是真实的,数字行向量的长度。输入
v
必须是真实的,数字行向量大小一样吗x
。输入
方法
必须是一个特征向量的三个选择。因为方法
指定一个默认值,这个参数是可选的。
函数myInterp (x, v,方法)参数x(:1){mustBeNumeric, mustBeReal}v(:1){mustBeNumeric、mustBeReal mustBeEqualSize (v, x)}方法(:1)字符{mustBeMember(方法,{“线性”、“立方”、“花键”})}=“线性”结束%函数代码…。结束%定义验证函数函数mustBeEqualSize (a, b)%测试相同的大小如果~ isequal(大小大小(a)、(b))开斋节=尺寸:不等号的;味精=第一次输入的大小必须等于第二个输入的大小。”;throwAsCaller (MException(开斋节,味精))结束结束
避免使用函数参数验证在自定义验证功能。关于定义的更多信息验证功能和预定义的验证函数的列表,看看参数验证功能。
输出参数验证
从R2022b、参数验证可以使用输出参数。
例如,这个函数验证的大小和类三个输入参数和一个输出参数使用独立的参数块。请注意,(输入)
块必须先于(输出)
块。
函数= myFunction (A, B, C)参数(输入)(1,1)字符串B(:1)增加一倍C(2,2)细胞结束参数(输出)(:1)增加一倍结束%函数代码…结束
类型的参数
函数参数验证可以声明四种参数。函数可以定义任何的这些参数,但是必须定义的参数按照以下顺序:
所需的位置参数
可选的位置参数
重复的位置参数
可选的参数名称
必需和可选位置参数
位置参数必须被传递给一个函数在一个特定的顺序。的位置值传入参数列表必须对应于订单中声明的参数参数
块。所有参数名称参数
块必须是唯一的。
位置参数的参数
块需要调用函数时,除非参数定义了一个默认值。指定一个默认值的参数声明使一个位置参数可选因为MATLAB可以使用默认值,当没有值是函数调用中传递。
默认值可以是一个常量或表达式产生结果满足参数声明。表达式可以参考之前声明它的参数参数
块,但不是参数声明。
MATLAB计算表达式只有当参数默认值不包括函数调用。
所有的可选参数都必须定位在所需的所有参数参数
块。例如,在这个论点,maxval
和minval
有默认值,因此可选的。
函数myFunction (x, y, maxval minval)参数x(:1)增加一倍y(:1)增加一倍maxval(1,1)的两倍= max (max (x), max (y)) minval(1,1)的两倍= min (min (x) min (y))结束%函数代码…。结束
你可以用这些语法调用这个函数:
myFunction (x, y, maxval minval) myFunction (x, y, maxval) myFunction (x, y)
一个可选的位置参数成为地位必须填写时需要的函数调用来确定参数。也就是说,如果您想要指定一个值minval
,您必须指定一个值maxval
。
忽略了位置参数
MATLAB可以忽略参数通过波浪号字符(~
在争论的地方。您可以定义一个函数,它忽略了未使用的位置参数通过添加一个波浪号字符(~
)的参数块对应的位置参数的函数签名。添加一个波浪号字符(~
)为每个忽略参数在函数签名。
忽略参数不能有默认值或指定类,大小,或验证功能。
加上字符(~
)被视为一个可选参数,除非它是紧随其后的是一个必需的位置参数。例如,在这个函数加上字符(~
)代表一个可选的参数。
函数c = f (~)参数~结束%函数代码结束
你可以不带参数调用这个函数。
c = f
或者你可以用一个参数调用这个函数。
c = f (2)
在以下功能,加上字符(~
)代表一个必需的参数。
函数c = f (x ~)参数~ x结束%函数代码…结束
调用这个函数必须包括两个参数。
c = f (2、3)
与忽略输入调用函数的更多信息,参见忽略函数定义的输入。
重复的参数
反复重复参数位置参数,可以指定作为参数。在一个声明重复参数参数
块,包括重复
属性。
参数(重复)__arg1最长……结束
函数可以有一个重复
参数
块的输入和输出。一个重复
输入参数块可以包含一个或多个重复的参数,而重复
输出参数块只能包含一个重复的论点。
一个函数,定义了一个重复
参数
块可以被称为零个或多个事件的参数。如果调用函数包括重复参数,然后所有参数重复
参数
块必须包括对每一个重复。
例如,如果一个重复
参数
块定义输入参数x
和y
,那么每个重复必须包含两个x
和y
。
重复输入参数不能指定默认值,因此不能选。然而,您可以调用这个函数没有包括任何重复参数。
函数必须声明重复输入参数后位置参数和之前的名称参数。你不能指定名称参数内重复
块。名称-值参数的信息,请参阅名称-值参数。
在函数中,每个重复论点成为细胞数组元素的个数等于重复中传递函数调用的数量。验证应用于细胞数组的每个元素。如果出现这个论点为零的函数被调用时,该单元阵列1-by-0大小。也就是说,它是空的。
例如,这个函数声明一块重复三个参数,x
,y
,选项
。
函数(伊势亚、yCell optionCell] = fRepeat (x, y,选项)参数(重复)x双y双选项{mustBeMember(选项,[“线性”、“立方”])}结束%函数代码%返回细胞数组伊势亚= x;yCell = y;optionCell =选项;结束
你可以调用这个函数没有输入或三个输入的倍数。MATLAB为每个参数创建一个单元阵列包含所有的值传递参数。这叫fRepeat
通过两组三个重复的参数。
(伊势亚yCell optionCell] = fRepeat (1、2、“线性”、3、4、“立方”)
伊势亚= 1×2单元阵列{[1]}{[3]}yCell = 1×2单元阵列{[2]}{[4]}optionCell = 1×2单元阵列{[“线性”]}{[“立方”]}
下面的函数接受重复的理由x
和y
输入一个重复
参数
块。在体内的功能,作为重复参数指定的值可在细胞阵列x
和y
。这个例子上面的值x
和y
匹配所需的输入情节
功能:情节(x1, y1,…)
。
函数myPlotRepeating (x, y)参数(重复)x(:1)增加一倍y(:1)增加一倍结束%函数代码x和y %交错z =重塑((x, y), 1, []);%调用绘图函数如果~ isempty (z)情节(z {:});结束结束
与重复调用这个函数对参数。
x1 = 1:10;日元=罪(x1);x2 = 0:5;y2 =罪(x2);myPlotRepeating (x1, y1, x2, y2)
避免使用变长度输入宗量
重复的参数
使用变长度输入宗量
不推荐功能,使用参数验证。如果变长度输入宗量
被限制在大小或类重复参数块,然后限制适用于所有的值变长度输入宗量
。
如果你使用变长度输入宗量
支持遗金宝app留代码,它必须是唯一的参数重复
参数
块。
例如,这个函数定义了两个位置参数和要求变长度输入宗量
重复的参数。
函数f (a, b,变长度输入宗量)参数一个uint32buint32结束参数(重复)变长度输入宗量结束%函数代码…结束
名称-值参数
名称-值参数关联的名字和值传递给函数。名称-值参数:
可以传递到函数在任何顺序
总是可选
必须声明毕竟位置参数和重复参数
不能出现在一个
参数
块使用重复
属性必须使用唯一名称,即使使用多个名称结构
不能使用的名称也用于位置参数
在一个声明名称参数参数
块使用点符号定义的字段结构。例如,名为结构NameValueArgs
定义了两个名称-值参数,Name1
和Name2
。您可以使用任何有效的MATLAB标识符作为结构名称。
参数NameValueArgs。Name1NameValueArgs。Name2结束
结构名称必须出现在函数签名。
函数myFunction (NameValueArgs)
使用名称的字段名称调用函数结构。
myFunction (Name1 = value1, Name2 = value2)
R2021a之前,通过名称字符串或字符向量和独立的名称和值用逗号。语法都是有效的在以后的版本。
结构的名称中使用的函数签名中的结构函数的名称空间,其中包含名称和值传递给函数。
函数结果= myFunction (NameValueArgs)参数NameValueArgs。Name1NameValueArgs。Name2结束%函数代码结果= NameValueArgs。Name1* NameValueArgs.Name2;结束
r = myFunction (Name1 = 3, Name2 = 7)
r = 21
名称-值参数支持部分名称匹配当没有歧义。金宝app例如,定义一个函数线宽
和线型
两个名称-值参数接受LineW
和行
,但使用行
会导致错误。在一般情况下,推荐使用全名实践来提高代码的可读性,避免意想不到的行为。
相同的名称参数可以重复在一个没有错误的函数调用,但最后版本指定一个MATLAB荣誉。例如,这个调用情节
指定的值颜色
两次。MATLAB显示红色的阴谋。
情节(x, y,颜色=“蓝色”,线型=”——“颜色=“红色”)
名称-值参数的默认值
您可以指定一个默认值为每一个名字。如果你不指定一个默认值和名称的函数没有参数,然后在名称字段不存在结构。如果没有名称的参数传递给函数,MATLAB创建结构,但它没有字段。
来确定名称参数被传递的函数调用,使用isfield
函数。
例如,下面的函数定义了两个必需的位置参数(宽度
和高度
)和两个名称-值参数(线型
和线宽
)。在这个例子中,选项
结构有两个字段(线型
和线宽
)包含默认值或值函数被调用时指定为名称参数。
函数myRectangle(宽度、高度、期权)参数宽度双高度双options.LineStyle(1,1)字符串=“-”options.LineWidth(1,1){mustBeNumeric}= 1结束%函数代码…结束
所有这些语法都是有效的方法来调用这个函数。
myRectangle (4、5) myRectangle(4、5、线型=”:“线宽= 2)myRectangle(4、5、线宽= 2,线型=”:“)myRectangle(4、5、线型=”:“)myRectangle(4、5、线宽= 2)
R2021a之前,通过名称字符串或字符向量和独立的名称和值用逗号。例如:
myRectangle (4、5、“线型”,”:“,“线宽”2)myRectangle (4、5、“线宽”2,“线型”,”:“)
使用重复和名称参数
如果函数重复定义参数,那么你必须声明在一个单独的名称参数参数
块,遵循重复参数块。例如,该函数接受两个参数,重复x
和y
。在指定所有的重复x
和y
,您可以指定一个名称-值参数分配值林
或日志
到PlotType
的名字。
确定函数调用包括PlotType
参数,使用isfield
函数来检查PlotType
字段规模
结构。
函数myLinLog (x, y,规模)参数(重复)x(:1)增加一倍y(:1)增加一倍结束参数scale.PlotType(1,1)字符串结束z =重塑((x, y), 1, []);如果isfield(规模、“PlotType”)如果scale.PlotType==“林”情节(z {:})elseifscale.PlotType==“日志”重对数(z {:})结束结束结束
调用这个函数有或没有名称参数。
myLinLog (1:5, 1:5) myLinLog (1:5, 1:5, 1:10, 1:100:1000) myLinLog (1:5, 1:5, 1:10, 1:100:1000 PlotType =“日志”)
R2021a之前,通过名称字符串或字符向量和独立的名称和值用逗号。例如:
1:100:1000 myLinLog (1:5, 1:5, 1:10,“PlotType”,“日志”)
多个名称结构
函数参数块可以包含多个名称的结构。然而,在所有结构字段名称必须是惟一的。这个函数有两个名称-值结构:lineOptions
和fillOptions
。这些结构不能有相同的字段名称。
的参数myRectangle
函数是:
宽度
和高度
需要位置参数的类型双
。lineOptions.LineStyle
是一个标量字符串的默认值吗“-”
。lineOptions.LineWidth
是一个标量数字的默认值吗1
。fillOptions.Color
是一个字符串。fillOptions.Pattern
没有限制它的价值。
函数myRectangle(宽度、高度、lineOptions fillOptions)参数宽度双高度双lineOptions.LineStyle(1,1)字符串=“-”lineOptions.LineWidth(1,1){mustBeNumeric}= 1 fillOptions.Color字符串fillOptions.Pattern结束%函数代码…结束
强劲的处理名称参数
最佳实践实现名称的参数在函数是通过定义一个参数块。一个参数块消除了需要编写自己的代码来解析名称-值的参数,和块也有助于实现鲁棒参数解析的“名字”,价值
语法和名称=值
语法在R2021a引入。
实施有效的名称
定义一个名称-值参数的参数块确保名称是一个有效的标识符。反过来,这有助于确保你的论点与工作“名字”,价值
和名称=值
语法。例如,一个使用无效的标识符的名称参数可以使用逗号分隔的语法:
myFunction(数据、“allow-empty”,真正的)
allow-empty = true
抛出一个错误。定义名称-值参数的参数块确保你的名字定义有效的MATLAB函数名称和兼容名称=值
语法。
避免与文本输入意想不到的结果
功能,包括可选的文本输入和名称参数运行的风险MATLAB解读文本输入的名称名称参数。这个函数包含两个可选文本输入和一个名称-值参数。
函数mySignal(标签、单位、选择)参数标签=“0”单位=“安”opts.Magnifier{mustBeMember (opts.Magnifier,“小”,“中”,“大”])}结束结束
标签
来“杂志”
和单位
来“库仑”
:mySignal (“杂志”,“库仑”)
“杂志”
名称-值的参数Magnifer
。“库仑”
该名称不是一个有效的值,所以功能错误。
为了避免这个问题的方法之一是标签
所需的参数通过移除它的默认值:
函数mySignal(标签、单位、选择)参数标签单元=“安”opts.Magnifier{mustBeMember (opts.Magnifier,“小”,“中”,“大”])}结束结束
标签
来“杂志”
并没有错误。
另一个选择是让所有三个输入名称参数。这可以帮助用户避免错误指定输入时,因为每个值与一个名字相关联时,与用户指定的输入不影响最后的结果。
从阶级属性名称参数
一个有用的功能语法在MATLAB使用一个类的公共属性名称的名称参数。为所有可设置的属性指定名称的参数定义的一个类(也就是说,所有公共属性SetAccess
),在一个使用这种语法参数
布洛克:
structName。?类名称
一个函数可以使用“structName
。?
类名称
“语法只有一次。因此,可以定义一个函数只有一个名称-值结构字段名称来自一个类,即使使用不同的类和结构名称。
如果类地方限制的值可以通过使用属性分配给属性验证,那么函数验证适用于个人名称参数。信息产权验证,看看验证属性值。
例如,该函数有两个参数,x
和y
并接受任何公共属性的名称和值matlab.graphics.chart.primitive.Bar
类。
函数propArgs myBar (x, y)参数x(::)翻倍y(::)翻倍propArgs ? matlab.graphics.chart.primitive.Bar结束propertyCell = namedargs2cell (propArgs);栏(x, y, propertyCell {:})结束
调用该函数所需的输入和任何可设置的属性名称-值对。
x = [1、2、3、4、5、6];y = x ^ 2;myBar (x, y) myBar (x, y, FaceColor =“红色”BarLayout =“分组”)
R2021a之前,通过名称字符串或字符向量和独立的名称和值用逗号。例如:
myBar (x, y,“FaceColor”,“红色”,“BarLayout”,“分组”)
覆盖特定属性
您可以重写类属性验证通过重新定义属性名称与特定名称-值参数的参数块。
structName。?类名称structName。PropertyName(dim2 dim1…)ClassName {fcn1, fcn2,…}
具体名称参数验证覆盖验证由类定义单独指定的属性名。
例如,下面的函数定义名称-值参数的属性matlab.graphics.chart.primitive.Bar
类。函数也覆盖了属性名FaceColor
只允许这些特定的值:红色的
或蓝色的
。
的matlab.graphics.chart.primitive.Bar
类都有一个默认值FaceColor
这并不是一个受限制的值(红色的
或蓝色的
)。因此,最重要的声明必须分配一个默认值,满足的限制mustBeMember
验证功能。也就是说,默认值必须红色的
或蓝色的
。
这个函数将名称结构转换为单元阵列包含交叉使用的名称和值namedargs2cell
函数。
函数propArgs myBar (x, y)参数x(::)翻倍y(::)翻倍propArgs ? matlab.graphics.chart.primitive.BarpropArgs.FaceColor{mustBeMember (propArgs.FaceColor{‘红’,‘蓝色’})}=“蓝色”结束propertyCell = namedargs2cell (propArgs);栏(x, y, propertyCell {:})结束
使用两个参数调用该函数,x
和y
。可以通过任何支持的名称-值对酒吧功能和价值金宝appFaceColor
这可以是红色的
或蓝色的
。其他的值FaceColor
是不允许的。
x = [1、2、3、4、5、6];y = x ^ 2;myBar (x, y) myBar (x, y, FaceColor =“红色”,BarLayout =“分组”)
的参数验证
当一个函数被调用时,MATLAB验证参数的顺序中声明参数
块,从上到下。每个参数完全验证之前下一个参数是验证。因此,任何引用先前宣布的论点被验证使用值。函数抛出一个错误的结果首先验证失败。
验证值可以不同于原始值作为输入传递函数被调用的时候。例如,这个函数声明类的输入uint32
值。第三个输入声明分配一个默认值等于前两个输入的产物。
函数c = f (a, b, c)参数一个uint32buint32cuint32= a。* b结束%函数代码…结束
调用函数的输入一个不同的数字类(例如,双
)的转换uint32
。
c = f (1.8, 1.5)
因为可选参数c
不是在函数调用中指定,MATLAB计算默认值并分配c
转换后一个
和b
来uint32
值。在这种情况下,转换结果为输入值为2。因此,产品的一个
次b
是四个。
c = uint32 4
如果你指定一个值第三输入,然后分配一个值的函数c
,不评估默认值表达式。
c = f (1.8, 1.5, 25)
c = uint32 25
避免类和大小转换
当一个参数值传递给一个函数类和大小不匹配所需的验证、MATLAB转换价值声明类和大小当转换是可能的。为了避免标准转换由MATLAB从参数验证,使用验证函数而不是类和大小限制。调用验证函数不返回值,不能改变参数的值。
例如,这个函数限制第一个输入的任何大小的二维数组类双
。第二个输入必须是5-by-3任何类的数组。
函数f (a, b)参数一个(::)翻倍b(5,3)结束%函数代码结束
因为标准MATLAB类型转换和标量扩展,你可以用下面的输入和调用这个函数没有收到一个验证错误。
f (的特征向量,144)
默认情况下,MATLAB将特征向量的元素转换为其等效数值和标量扩展适用于创建一个5-by-3标量值的数组144年
。
使用专门的验证功能可以提供更具体的参数验证。例如,这个函数定义了专门的验证功能,它使用的类和大小规格第一和第二参数。这些地方的功能使您能够避免输入值的转换。
mustBeOfClass
限制了输入到一个特定的类不允许转换或子类。对于一个相关函数,看看mustBeA
。mustBeEqualSize
限制两个等大的输入是不允许标量扩张。对于一个相关函数,看看mustBeScalarOrEmpty
。mustBeDims
限制输入的指定尺寸不允许调换或标量扩张。对于一个相关函数,看看mustBeVector
。
函数fCustomValidators (a, b)参数一个{mustBeOfClass(“双”),mustBeDims (a, 2)}b{mustBeEqualSize (b)}结束%函数代码结束%定制验证器功能函数mustBeOfClass(输入类名)%测试特定的类名cname =类(输入);如果开斋节= ~ strcmp (cname,类名)“类:notCorrectClass”;味精= [的输入必须是类的名称,“。”];throwAsCaller (MException(开斋节,味精))结束结束函数mustBeEqualSize (a, b)%测试相同的大小如果~ isequal(大小大小(a)、(b))开斋节=尺寸:不等号的;味精=输入大小一定相等。;throwAsCaller (MException(开斋节,味精))结束结束函数numDims mustBeDims(输入)%测试数量的维度如果~ isequal(长度(大小(输入)),numDims)开斋节=“大小:wrongDimensions”;味精= [输入必须的num2str (numDims),维度(s)。];throwAsCaller (MException(开斋节,味精))结束结束
使用fCustomValidators
发短信的mustBeOfClass
函数。第一个参数是不上课双
,所以函数返回一个错误。
fCustomValidators (的特征向量,144)
错误使用fCustomValidators fCustomValidators(特征向量,144)↑无效的论点在位置1。输入必须是类双。
在这个调用,第一个输入的维数是错误的,所以验证函数返回一个自定义的错误消息。
fCustomValidators ((2, 2, 4), 144)
错误使用fCustomValidators fCustomValidators((2, 2, 4), 144)↑无效的论点在位置1。输入必须有2个维度(s)。
的mustBeEqualSize
验证器函数检查输入相同的大小。
fCustomValidators((2, 2), 144年)
错误使用fCustomValidators fCustomValidators((2, 2), 144年)↑无效的论点在位置2。输入必须有平等的大小。
相关的预定义的验证功能,请参阅mustBeA
,mustBeFloat
,mustBeVector
。
输入参数个数
在参数验证
的输入参数个数
函数返回的数量函数输入参数中给出调用当前执行的函数。使用函数参数验证时,返回的值输入参数个数
在一个函数是位置参数的数量函数被调用时提供。
重复的参数位置参数的数量,因此重复传递到函数调用时的参数包含在返回的值输入参数个数
。
的价值输入参数个数
返回不包含可选参数,不包括函数调用。同时,输入参数个数
不计算任何名称参数。
使用输入参数个数
确定可选位置参数传递给函数时调用。例如,这个函数声明三个位置参数和一个名称-值参数。这就是函数决定了参数传递时调用。
函数结果= fNargin (a, b, c, namedargs)参数一个(1,1)的两倍b(1,1)的两倍c(1,1)的两倍= 1 namedargs.Format(:1)字符结束%函数代码开关输入参数个数情况下2结果= a + b;情况下3结果b = c ^ + ^ c;结束如果isfield (namedargs“格式”)格式(namedargs.Format);结束结束
这个函数调用的值输入参数个数
是2
:
结果= fNargin (3、4)
结果= 7
这个函数调用的值输入参数个数
是3
:
结果= fNargin (3、4、7.62)
结果= 4.3021 e + 04
这个函数调用的值输入参数个数
是3:
结果= fNargin(3、4、7.62、格式=“银行”)
结果= 43020.56
限制变量和函数访问
参数
块中存在函数的工作区。任何包、类或函数添加到函数的使用范围进口
命令被添加到的范围参数
块。
验证器的唯一变量可见功能和默认值表达式的输入变量已经宣布。这个函数的默认值c
来自一个
和b
。
函数c = f (a, b, c)参数一个uint32buint32cuint32= a * b结束%函数代码…结束
不过,你不能把输入变量还没有宣布的参数
块。例如,使用此声明为参数一个
是无效的,因为在前面的函数b
和c
尚未宣布。
参数uint32 = b * c b uint32 c uint32结束
参数验证表达式可以参考此前宣布,因此验证参数。验证函数名称和默认值参数不能访问其他名称参数。
限制功能参数
块
对先前宣布的任何引用参数必须在文本中可见的验证功能和默认值。确保代码透明,不使用函数与函数的工作区。具体地说,不要使用嵌套函数或在下表中列出的任何功能参数
块。
assignin |
内装式 |
清晰的 |
dbstack |
eval |
evalc |
evalin |
存在 |
函数宏指令 |
输入 |
inputname |
负载 |
输入参数个数 |
narginchk |
nargoutchk |
保存 |
谁 |
谁 |
这些限制仅适用于内参数
块和不适用于变量或函数的身体功能。
调试参数块
而内部调试的参数块工作区只读。这意味着它可以检查工作区并查看分配给变量的值。然而,它是不可能创建新变量或改变的值分配给现有的变量而工作区是只读的。一旦调试器以外的参数块将再次可以创建或编辑变量。