函数参数验证

参数验证简介

函数实参验证是对函数输入实参声明特定限制的一种方法。使用参数验证可以约束函数输入值的类、大小和其他方面,而无需在函数体中编写代码来执行这些测试。

函数参数验证是声明式的,这使MATLAB成为可能®通过检查特定代码块提取函数信息的桌面工具。通过声明输入参数的需求,可以消除繁琐的参数检查代码,并提高代码的可读性、健壮性和可维护性。

函数参数验证语法简化了定义可选参数、重复参数和名称-值参数的过程。该语法还允许您以一致的方式定义默认值。

在哪里使用参数验证

在函数定义中,函数参数验证的使用是可选的。参数验证在可以被任何代码调用的函数中最有用,并且在执行函数代码之前必须确定输入的有效性。为供他人使用而设计的函数可以从参数输入的适当限制级别和根据函数的输入返回特定错误消息的机会中受益。

哪里不需要验证

在局部函数和私有函数中,以及私有方法或受保护方法中,调用者知道输入要求,因此可以使用有效参数调用这些类型的函数。

哪里不允许验证

不能在嵌套函数、抽象方法或处理类析构函数方法中使用参数验证语法。有关方法中参数验证的详细信息,请参见类方法中的参数验证

参数块语法

函数在由关键字分隔的代码块中定义参数验证参数而且结束.如果使用,参数块必须在函数的第一个可执行行之前开始。

你可以使用多个参数函数中的块,但所有块必须出现在不属于参数块。

下面代码中突出显示的区域显示了参数验证的语法。

函数参数声明可以包含以下任何一种限制:

  • 大小-每个维度的长度,用圆括号括起来

  • 类-一个MATLAB类的名称

  • 函数——以逗号分隔的验证函数列表,用大括号括起来

也可以在函数验证声明中为输入参数定义默认值。默认值必须满足为该参数声明的限制。

大小

验证大小是输入参数的维数,用非负整数或冒号指定().冒号表示该维度允许任何长度。不能对维度使用表达式。函数调用中赋给参数的值必须与指定的大小兼容,否则MATLAB将抛出错误。

MATLAB索引赋值规则适用于尺寸规格。例如,1乘1的值与指定的大小兼容(5,3)因为MATLAB应用标量展开。此外,MATLAB行列转换应用,使大小指定为(: 1)可以接受1 × n和n × 1的大小。

下面是一些例子:

  • (1,1)—输入必须恰好为1 × 1。

  • (3)—第一个维度必须为3,第二个维度可以为任意值。

如果没有指定大小,则允许任何大小,除非受到验证函数的限制。

验证类是单个类的名称。赋给函数输入的值必须是指定的类或可转换为指定的类。使用MATLAB支持的任何MATLAB类或外部定义的类,除非Java、COM类和MATLAB类定义不使用万博1manbetxclassdef关键字(在MATLAB软件Version 7.6之前定义的类)。

下面是一些例子:

  • 字符-输入必须是合格的字符,或MATLAB可以转换为a的值字符,例如字符串

  • —输入可以是任意精度的数值。

  • 细胞—输入必须是单元格数组。

  • 用户定义的类(如枚举类)可以将输入限制为更特定的值,并使您能够控制支持哪些转换。万博1manbetx

如果不指定类,则允许任何类,除非受到验证函数的限制。

验证功能

验证函数是一个MATLAB函数,如果参数值不满足某些要求,它就会抛出错误。验证函数不返回值,并且与class和size不同,它不能改变它们正在验证的参数的值。

在验证过程中,MATLAB将参数值传递给为该参数列出的每个验证函数。传递给验证函数的值是类和大小规范所做的任何转换的结果。MATLAB从左到右调用每个函数,并抛出遇到的第一个错误。

有关预定义验证函数的表,请参见参数验证函数

默认值

参数默认值可以是满足大小、类和验证函数要求的任何常量或表达式。在实参声明中指定默认值使实参成为可选的。当函数调用中不包含实参时,MATLAB使用默认值。每次使用默认值时,都会计算默认值表达式。

请注意

因为MATLAB只在函数调用时不带实参值时验证默认值,无效的默认值只在函数调用时不带实参时才会导致错误。

可选参数必须定位在函数签名中的必选参数之后参数块。有关可选参数的详细信息,请参见必需的和可选的位置参数

验证序列

中的参数从上到下进行验证参数块。MATLAB以特定的顺序验证参数声明的每个部分。首先验证类,然后验证大小。类和大小验证的结果被传递给验证函数。每个步骤都是可选的,取决于类、大小和验证函数是否在参数声明中。

有关更多信息,请参见参数验证顺序

转换为声明的类和大小

由于标准的MATLAB转换规则,类验证和大小验证都可以更改输入参数的值。因此,函数体中的验证值可以与调用函数时传递的值不同。转换规则来源于MATLAB应用于表单索引赋值的规则:

A(indexes) = value

MATLAB可以确定左边的值对类和大小有要求,在某些情况下,可以将右边的值转换为所需的类和大小。

相关信息请参见避免类和大小转换

参数验证的例子

参数Block指定三个输入的大小和类。

函数out = myFunction(A, B, C)参数一个(1,1)字符串B(: 1)增加一倍C(2, 2)细胞结束%功能代码...结束

在这个函数中,变量必须满足以下验证要求:

  • 一个是字符串标量。

  • B是一个1乘任意长度的双精度向量。

  • C是一个2 × 2单元格数组。

值转换

类中指定的类如何将输入转换为匹配参数块。的SpeedEnum类是一个枚举类,用于定义第三个输入参数所允许的值。

函数forwardSpeed (a, b, c)参数一个b字符cSpeedEnum结束%功能代码第(a)类)第(b)类)第(c)类结束

这里是枚举类。

classdefSpeedEnum < int32枚举满(100)半(50)停(0)结束结束

对函数的调用使用输入值,MATLAB可以将输入值转换为声明的类型。函数中的实际参数类型显示为输出。

forwardSpeed (int8 (4),“字符串”“全部”
双char SpeedEnum

使用验证函数的特定限制

验证函数可以以更具体的方式限制输入参数。您可以为许多常见类型的验证使用预定义的验证函数,并且您可以定义自己的验证函数来满足特定的需求。

例如,此函数使用指定以下验证mustBeNumericmustBeRealmustBeMember,和局部函数mustBeEqualSize

  • 输入x必须是任意长度的实数数字行向量。

  • 输入v必须是一个实的,数值的行向量x

  • 输入方法必须是三个允许选择之一的字符向量。因为方法指定一个默认值,此参数是可选的。

函数myInterp (x, v,方法)参数x(: 1) {mustBeNumeric, mustBeReal}v(: 1) {mustBeNumeric、mustBeReal mustBeEqualSize (v, x)}方法(: 1)字符{mustBeMember(方法,{“线性”、“立方”、“花键”})}“线性”结束%功能代码...结束%自定义验证函数函数mustBeEqualSize (a, b)测试a和b的大小是否相等如果~ isequal(大小大小(a)、(b))错误(第一个输入的大小必须等于第二个输入的大小结束结束

避免在自定义验证函数中使用函数参数验证。有关定义验证函数和预定义验证函数列表的详细信息,请参见参数验证函数

争论的种类

函数实参验证可以声明四种实参。函数可以定义任何这些类型的实参,但实参必须按照以下顺序定义:

  1. 必需的位置参数

  2. 可选位置参数

  3. 重复位置参数

  4. 可选的名称-值参数

必需的和可选的位置参数

位置参数必须以特定顺序传递给函数。参数列表中传递的值的位置必须与参数在中声明的顺序对应参数块。中的所有参数名参数Block必须唯一。

中的位置参数参数块是调用函数时必需的,除非实参定义了默认值。在参数声明中指定默认值使位置参数成为可选的,因为MATLAB可以在函数调用中没有传递值时使用默认值。

默认值可以是一个常量,也可以是产生满足参数声明的结果的表达式。方法中在表达式之前声明的实参参数块,但不包括在它之后声明的参数。

MATLAB只在函数调用中不包含实参时计算默认值表达式。

中的所有可选参数必须定位在所有必选参数之后参数块。例如,在这个参数块中,maxval而且minval具有默认值,因此是可选的。

函数myFunction (x, y, maxval minval)参数x(: 1)增加一倍y(: 1)增加一倍maxval(1,1)的两倍= max(max(x),max(y)(1,1)的两倍= min (min (x) min (y))结束%功能代码...结束

你可以使用以下语法调用这个函数:

myFunction(x,y,maxval,minval) (x,y,maxval)

当必须在函数调用中填充可选位置实参以标识后面的实参时,可选位置实参就成为必需的。也就是说,如果您想为minval时,必须指定一个值maxval

被忽略的位置参数

MATLAB允许您通过传递波浪号字符()来代替争论。可以通过添加波浪号()在参数块中,对应于参数在函数签名中的位置。添加波浪号()为函数签名中每个被忽略的参数。

被忽略的参数不能有默认值,也不能指定类、大小或验证函数。

波浪号字符()被视为可选的输入参数,除非它后面跟着一个必需的位置参数。例如,在这个函数中,波浪号字符()表示一个可选参数。

函数C = f(~)参数结束%功能代码结束

你可以不带参数地调用这个函数。

C = f

或者你可以用一个参数来调用这个函数。

C = f(2)

在下面的函数中,波浪号字符()表示必需的参数。

函数C = f(~,x)参数~ X结束%功能代码...结束

对该函数的调用必须包含两个实参。

C = f(2,3)

有关使用忽略输入调用函数的详细信息,请参见忽略函数输入

重复的参数

重复参数是可以作为输入参数重复指定的位置参数。类中声明重复实参参数块,其中包含重复属性。

参数(重复)arg1 arg2…结束

函数只能有一个重复参数块,它可以包含一个或多个重复的参数。

定义A的函数重复参数Block可以在所有参数出现0次或多次时调用。如果对函数的调用包含重复实参,则重复参数Block必须包含在每次重复中。

例如,如果a重复参数块定义参数x而且y,那么每次重复都必须包含两者x而且y

重复参数不能指定默认值,因此不能为可选参数。但是,您可以在不包含任何重复参数的情况下调用该函数。

函数必须在位置参数之后和名值参数之前声明重复参数。类中不能指定名称-值参数重复块。有关名称-值参数的信息,请参见名称-值参数

在函数中,每个重复参数变成一个单元格数组,其元素数量等于函数调用中传递的重复次数。验证应用于单元格数组的每个元素。如果函数调用时该参数没有出现,则单元格数组的大小为1 × 0。也就是说,它是空的。

例如,这个函数声明了一个由三个重复参数组成的块,xy,选项

函数[xCell,yCell,optionCell] = fRepeat(x,y,option)参数(重复)xy选项{mustBeMember(选项,[“线性”、“立方”])}结束%功能代码返回单元格数组xCell = x;yCell = y;optionCell = option;结束

可以在没有输入或三个输入的倍数的情况下调用函数。MATLAB为每个参数创建一个单元格数组,其中包含传递给该参数的所有值。这个调用fRepeat传递三个重复参数中的两组。

[xCell,yCell,optionCell] = fRepeat(1,2,“线性”、3、4、“立方”
xCell = 1×2单元格阵列{[1]}{[3]}yCell = 1×2单元格阵列{[2]}{[4]}optionCell = 1×2单元格阵列{["linear"]} {["cubic"]}

下面的函数接受重复的参数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;Y1 = sinx1;X2 = 0:5;Y2 = sinx2;myPlotRepeating (x1, y1, x2, y2)

避免使用变长度输入宗量重复参数

使用变长度输入宗量对于使用参数验证的函数,不推荐使用。如果变长度输入宗量在重复参数块中限制大小或类,则限制适用于变长度输入宗量

如果你使用变长度输入宗量属性中万博1manbetx的唯一参数,以支持遗留代码重复参数块。

例如,这个函数定义了两个必需的位置参数和变长度输入宗量作为重复的论证。

函数F (a, b, varargin)参数一个uint32buint32结束参数(重复)变长度输入宗量结束%功能代码...结束

名称-值参数

名称-值参数将名称与传递给函数的值关联起来。名称-值参数:

  • 可以以任何顺序传递给函数吗

  • 都是可选的

  • 必须在所有位置和重复参数之后声明

  • 不能出现在参数块,该块使用重复属性

  • 即使在使用多个名称-值结构时也必须使用唯一的名称

  • 不能使用同样用于位置参数的名称

类中声明名称-值参数参数块使用点表示法来定义结构的字段。例如,命名的结构NameValueArgs定义两个名称-值参数,Name1而且Name2.可以使用任何有效的MATLAB标识符作为结构名。

参数NameValueArgs。Name1NameValueArgs。Name2结束

结构名必须出现在函数签名中。

函数myFunction (NameValueArgs)

使用名称-值结构中的字段名称(作为字符串或字符向量传递)调用函数。

myFunction (“Name1”value1,“Name2”value2)

函数签名中使用的结构的名称是函数工作区中结构的名称,该结构包含传递给函数的名称和值。

函数结果= myFunction(NameValueArgs)参数NameValueArgs。Name1NameValueArgs。Name2结束%功能代码result = NameValueArgs。Name1* NameValueArgs.Name2;结束
r = myFunction(“Name1”3,“Name2”,7)
R = 21

名称-值参数的默认值

您可以为每个名称指定一个默认值。如果没有指定默认值,并且函数调用时没有该名称-值参数,则该字段不会出现在名称-值结构中。如果没有将名称-值参数传递给函数,MATLAB将创建结构,但它没有字段。

要确定函数调用中传递了哪些名称-值参数,请使用isfield函数。

例如,下面的函数定义了两个必需的位置参数(宽度而且高度)和两个名称-值参数(线型而且线宽).在本例中,选项结构有两个字段(线型而且线宽),包含默认值或在调用函数时作为名称-值参数指定的值。

函数myRectangle(宽度、高度、期权)参数宽度高度选项。线型(1,1)字符串“-”选项。线宽(1,1) {mustBeNumeric}= 1结束%功能代码...结束

以下所有方法都是调用此函数的有效方法。

myRectangle(4、5)myRectangle(4、5、“线型””:““线宽”2) myRectangle(4、5、“线宽”,2,“线型””:“) myRectangle(4、5、“线型””:“) myRectangle(4、5、“线宽”, 2)

使用重复参数和名称-值参数

如果函数定义了重复实参,则必须在单独的文件中声明名称-值实参参数重复参数块后面的块。例如,这个函数接受两个重复的参数,x而且y.的所有重复之后x而且y,您可以指定一个名称-值对来赋值日志PlotType的名字。

方法确定函数调用是否包含PlotType参数,使用isfield函数来检查PlotType规模结构。

函数linLog (x, y,规模)参数(重复)x(: 1)增加一倍y(: 1)增加一倍结束参数规模。PlotType(1,1)字符串结束Z =重塑([x;y],1,[]);如果isfield(规模、“PlotType”如果规模。PlotType = =“林”情节(z {:})elseif规模。PlotType = =“日志”重对数(z {:})结束结束结束

调用这个函数时带或不带名称-值参数。

myLinLog(1:5,1:5,1:10,1:10:100:1000)“PlotType”“日志”

多名称-值结构

函数参数块可以包含多个名称-值结构。但是,字段名在所有结构中必须是唯一的。这个函数有两个名称-值结构:lineOptions而且fillOptions.这些结构不能有相同的字段名。

myRectangle函数是:

  • 宽度而且高度是否需要类型的位置参数

  • lineOptions。线型标量字符串的默认值为“-”

  • lineOptions。线宽标量数字的默认值是1

  • fillOptions。颜色是一个字符串。

  • fillOptions。模式它的价值没有限制。

函数myRectangle(宽度、高度、lineOptions fillOptions)参数宽度高度lineOptions。线型(1,1)字符串“-”lineOptions。线宽(1,1) {mustBeNumeric}= 1 fillOptions。颜色字符串fillOptions。模式结束%功能码...结束

类属性中的名称-值参数

MATLAB中一个有用的函数语法使用类的公共属性作为名称-值参数的名称。为类定义的所有可设置属性指定名称-值参数(即所有带有public的属性)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”“分组”

覆盖特定属性

可以通过在参数块中使用特定的名称-值参数重新定义属性名来重写类属性验证。

structName.?类名称structNamePropertyName(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.可选地传递bar函数支持的任何名称-值对和for的值万博1manbetxFaceColor两者都有可能红色的蓝色的.的其他值FaceColor是不允许的。

X = [1,2,3;4,5,6];Y = x.^2;myBar (x, y) myBar (x, y,‘FaceColor’,‘红’,‘BarLayout’,“分组”)

类方法中的参数验证

在公共方法中验证方法输入参数很有用,因为对方法的调用可能不是起源于类代码。可以在具体的类方法中使用函数参数验证,包括在抽象类中定义的具体方法。但是,抽象方法(不是由类实现的方法)不能定义参数块。有关类方法的信息,请参见方法而且抽象类和类成员

如果一个classdef文件包含在单独文件中定义的方法的方法原型,包括参数块中定义方法的单独文件。有关在单独文件中定义方法的详细信息,请参见单独文件中的方法

子类方法不继承函数参数验证。在覆盖超类方法的子类方法中,可以向子类方法添加与在超类方法中使用的相同的参数验证。

句柄类析构函数方法不能使用参数验证。一个名为删除类的句柄子类中参数Block不作为析构函数处理。(换句话说,当对象被销毁时,MATLAB不会调用它)。有关类析构函数方法的更多信息,请参见句柄类析构函数

参数验证顺序

函数调用时,MATLAB将按输入参数在中声明的顺序验证它们参数块,从上到下。在验证下一个参数之前,对每个参数进行完全验证。因此,任何对先前声明的参数的引用都使用已验证的值。函数在第一次验证失败时抛出错误。

在调用函数时,验证值可能与作为输入传递的原始值不同。例如,这个函数将输入声明为类uint32值。第三个输入声明指定了一个默认值,等于前两个输入的乘积。

函数C = f(a, b, C)参数一个uint32buint32cuint32= a .* b结束%功能代码...结束

调用带有不同数值类输入的函数(例如,)导致转换为uint32

C = f(1.8,1.5)

因为可选的输入参数c没有在函数调用中指定,MATLAB计算默认值并将其赋给c转换后一个而且buint32值。在本例中,转换的结果是两个输入的值都为2。因此,的乘积一个b是四个。

C = uint32 4

如果为第三个输入指定值,则函数将值赋给c并且不计算默认值表达式。

C = f(1.8,1.5,25)
C = uint32 25

避免类和大小转换

在验证过程中,MATLAB在调用任何验证函数之前先应用类验证,然后应用大小验证。如果函数调用中省略的可选输入使用默认值,则在应用验证过程之前将此值赋给实参。

当传递给函数的实参值与验证所需的类和大小不匹配时,MATLAB会在可能的转换下将该值转换为声明的类和大小。然而,转换可能不是理想的行为。

下面是MATLAB可以执行的一些转换示例。

满足数字类限制:

  • 一个字符值可以转换为它的Unicode®数值。

  • 一个字符串可以转换成数字还是如果字符串不是单个数字的表示。

满足尺寸限制:

  • 标量展开可以将大小从标量更改为非标量。

  • 列向量可以转换为行向量。

为了消除MATLAB从输入参数验证中执行的标准转换,请使用验证函数而不是类和大小限制。对验证函数的调用不会返回值,也不能更改输入参数的值。

例如,这个函数将第一个输入限制为类中任意大小的二维数组.第二个输入必须是任意类的5 × 3数组。

函数f (a, b)参数一个(::)翻倍b(5,3)结束%功能代码...结束

由于标准的MATLAB类型转换和标量展开,您可以使用以下输入调用此函数,并且不会收到验证错误。

f (的特征向量, 144)

默认情况下,MATLAB将字符向量的元素转换为它们的等效数值,并应用标量展开从标量值创建一个5 × 3数组144

使用专门的验证函数可以提供更具体的输入参数验证。例如,这个函数定义了两个专门的验证函数,用来代替第一个和第二个参数的类和大小规范。这些局部函数使您能够避免输入值转换。

函数fCustomValidators (a, b)参数一个{mustBeA(“双”),mustBeDims (a, 2)}b{mustBeSize (b [5 3])}结束%功能代码...结束%自定义验证器函数函数mustBeA(输入类名)%针对特定类别进行测试如果~ isa(输入类名)错误('输入必须是类double '结束结束函数sizeDims mustBeSize(输入)测试特定的尺寸如果~ isequal(尺寸(输入),sizeDims)错误(['输入必须大小'num2str (sizeDims)])结束结束函数numDims mustBeDims(输入)测试维数如果~ isequal(长度(大小(输入)),numDims)错误([“输入必须有”num2str (numDims),“维度”。])结束结束

mustBeSize而且mustBeDims验证函数强制严格声明输入参数。

fCustomValidators (的特征向量, 144)
位置1的输入参数无效。输入必须是double类

在此调用中,第一个输入的维数是错误的,因此验证函数返回一个自定义错误消息。

fCustomValidators ((2, 2, 4), 144)
位置1的输入参数无效。输入必须有2个维度

mustBeSizeValidator函数将第二个输入限制为特定的维度,该维度在错误消息中提供。

fCustomValidators((2, 2), 144年)
位置2的输入参数无效。输入必须是大小[5 3]

输入参数个数参数验证

输入参数个数函数返回在当前执行函数的调用中给出的函数输入参数的数量。使用函数参数验证时,返回的值输入参数个数在函数中,是调用函数时提供的位置参数的数量。

重复实参是位置实参,因此调用时传递给函数的重复实参数量包含在返回的值中输入参数个数

价值是输入参数个数Returns不包括函数调用中不包括的可选参数。同时,输入参数个数不计算任何名称-值参数。

使用输入参数个数确定在调用函数时是否将可选位置参数传递给函数。例如,这个函数声明了三个位置参数和一个名称-值参数。下面是函数如何确定调用时传递的参数。

  • 输入参数个数确定可选位置参数c参数传递给函数开关块。

  • isfield的名称-值参数格式传递给函数。

函数result = fNargin(a, b, c, namedargs)参数一个(1,1)的两倍b(1,1)的两倍c(1,1)的两倍= 1 namedargs。格式(: 1)字符结束%功能代码开关输入参数个数情况下2 result = a + b;情况下3 result = a^c + b^c;结束如果isfield (namedargs“格式”)格式(namedargs.Format);结束结束

在此函数调用中,的值输入参数个数2

result = fNargin(3,4)
结果= 7

在此函数调用中,的值输入参数个数3.

result = fNargin(3,4,7.62)
结果= 4.3021e+04

在此函数调用中,的值输入参数个数是3:

result = fNargin(3,4,7.62,“格式”“银行”
Result = 43020.56

变量和函数访问限制

参数块存在于函数的工作区中。类添加到函数作用域的任何包、类或函数进口命令添加到参数块。

唯一对验证器函数和默认值表达式可见的变量是已经声明的输入变量。在此函数中,默认值为c是从一个而且b

函数C = f(a,b, C)参数一个uint32buint32cuint32= a * b结束%功能代码...结束

类型中尚未声明的输入变量不能被引用参数块。例如,使用此声明作为参数一个在前面的函数无效的原因b而且c还没有宣布。

参数A uint32 = b * c b uint32 c uint32结束

参数验证表达式只能引用先前声明并因此验证过的参数。名称-值参数的验证函数和默认值不能访问其他名称-值参数。

函数的限制参数

对先前声明的参数的任何引用必须在验证函数和默认值的文本中可见。为确保代码透明,不要使用与函数工作区交互的函数。具体来说,不要使用嵌套函数或下表中列出的任何函数参数块。

assignin 内装式 清晰的
dbstack eval evalc
evalin 存在 函数宏指令
输入 inputname 负载
输入参数个数 narginchk nargoutchk
保存

这些限制仅适用于参数块且不应用于函数体中的变量或函数。

另请参阅

|

相关的话题