文档

函数参数验证

参数验证简介

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

函数参数验证是声明性的,它支持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软件版本7.6之前定义的M金宝appATLAB类除外(不使用的类定义classdef关键字)。

下面是一些例子:

  • 字符- input必须是类字符,或MATLAB可以转换为字符,如字符串

  • 任意精度的数值

  • 细胞一个细胞数组

  • 用户定义的类(例如枚举类)可以将输入限制为更具体的值,并允许您控制支持哪些转换。金宝app

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

验证功能

验证函数是一种MATLAB函数,如果参数值不能满足某些要求,则抛出错误。验证函数不返回值,而且与类和大小不同,它不会对正在验证的参数值造成任何更改。

在验证过程中,MATLAB将参数值传递给为该参数列出的每个验证函数。MATLAB从左到右调用每个函数,并抛出遇到的第一个错误。

传递给验证函数的值是类和大小规范进行任何转换的结果。

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

默认值

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

请注意

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

可选参数必须位于函数签名中的required参数之后和参数块。有关可选参数的更多信息,请参见必需和可选的位置参数

验证序列

方法中从上到下验证参数参数块。MATLAB以特定顺序验证参数声明的每个部分。首先,验证类,那么大小。类和大小验证的结果传递给验证函数。每个步骤是可选的,具体取决于类,大小和验证功能是否在参数声明中。

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

转换为声明的类和大小

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

(指数)=值

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

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

参数验证的例子

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

函数out = myFunction(A, B, C)参数A(1,1)字符串B(1,:)双C(2,2)单元格结尾%函数代码...结尾

在这个函数中,变量声明如下:

  • 一个是一个字符串标量。

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

  • C是一个2×2个单元格阵列。

值转换

以下功能说明了如何转换输入以匹配所指定的类参数块。的SpeedEnum类是为定义第三个输入参数所允许的值而创建的枚举类。

函数forwardSpeed (a, b, c)参数a double b char c SpeedEnum结尾%函数代码disp(类(a)) disp(类(b)) disp(类(c))结尾

下面是枚举类。

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

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

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

使用验证函数的特定限制

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

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

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

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

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

函数myInterp (x, v,方法)参数x (1,:) {mustBeNumeric,mustBeReal} v (1,:) {mustBeNumeric,mustBeReal,mustBeEqualSize(v,x)}方法(1,:)“线性”结尾%函数代码...结尾%自定义验证函数函数mustBeEqualSize (a, b)%测试如果a和b具有相同的大小如果~ isequal(大小大小(a)、(b))错误(“第一次输入的大小必须等于第二次输入的大小”结尾结尾

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

类型的参数

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

  1. 所需的位置参数

  2. 可选的位置参数

  3. 重复的位置参数

  4. 可选的参数名称

必需和可选的位置参数

位置参数必须以特定的顺序传递给函数。参数中传递的值的位置必须与参数在参数块。的所有参数名参数块必须是唯一的。

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

默认值可以是一个常量,也可以是生成满足参数声明的结果的表达式。表达式可以引用在它之前声明的参数参数块,但不包括在其后面声明的参数。

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

的所有可选参数必须位于所有必需参数之后参数块。例如,在这个参数块中,maxlenminlen具有默认值,因此是可选的。

函数myFunction (x, y, maxval minval)参数X (1,:) double y (1,:) double maxval (1,1) double = max(max(X),max(y)) minval (1,1) double = min(min(X),min(y))结尾%函数代码...结尾

你可以用这些参数来调用这个函数:

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

当必须在函数调用中填充其位置以标识其后面的参数时,就需要可选的位置参数。也就是说,如果您想指定的值minlen,则必须指定值maxlen

忽略了位置参数

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

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

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

函数c = f(〜)参数结尾%函数代码结尾

您可以使用没有参数调用此函数。

c = f

或者只有一个输入参数。

c = f (2)

在以下函数中,Tilde字符()表示一个必需的参数。

函数c = f (x ~)参数〜X.结尾%函数代码...结尾

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

c = f(2、3)

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

重复的参数

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

参数(重复)arg1 arg2 ...结尾

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

定义一个重复参数可以调用块中的零或多个块中所有参数的块。如果对函数的调用包括重复参数,则必须包括每个重复的块中的所有参数。

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

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

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

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

函数(伊势亚、yCell optionCell] = fRepeat (x, y,选项)参数(重复)x double y double option {mustBeMember(option,["linear","cubic"])}结尾%函数代码%返回单元阵列伊势亚= x;yCell = y;optionCell =选项;结尾

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

(伊势亚yCell optionCell] = fRepeat(1、2、“线性”、3、4、“立方”
xCell = 1×2 cell array {[1]} {[3]} yCell = 1×2 cell array {[2]} {[4]} optionCell = 1×2 cell array {["linear"]} {["cubic"]}

以下函数接受重复参数xy输入一个重复参数块。在函数体中,作为重复参数指定的值在单元格数组中可用xy.这个例子交错的值xy将所需的输入匹配到阴谋功能:绘图(x1,y1,...)

函数myplotrepeating(x,y)参数(重复)x(1,:)乘以y (1,:)结尾%函数代码%交叉x和yz =重塑((x, y), 1, []);%呼叫绘图功能如果~ isempty (z)情节(z {:});结尾结尾

使用重复的输入参数对调用此函数。

x1 = 1:10;日元=罪(x1);x2 = 0:5;y2 =罪(x2);myPlotRepeating (x1, y1, x2, y2)

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

使用变长度输入宗量不推荐使用参数验证的函数。如果你使用变长度输入宗量为了支金宝app持遗留代码,它必须是重复参数块。

如果变长度输入宗量在重复参数块中限制大小或类,那么这些限制将应用于变长度输入宗量

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

函数f (a, b,变长度输入宗量)参数A uint32 b uint32结尾参数(重复)变长度输入宗量结尾%函数代码...结尾

名称-值参数

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

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

  • 总是可选

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

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

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

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

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

参数NameValueArgs。Name1NameValueArgs。Name2结尾

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

函数myfunction(namevalueargs)

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

myFunction ('姓名1',value1,“Name2”,value2)

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

函数结果= myFunction (NameValueArgs)参数NameValueArgs。Name1NameValueArgs。Name2结尾%函数代码结果= NameValueArgs。Name1* NameValueArgs.Name2;结尾
r = myFunction ('姓名1'3,“Name2”7)
r = 21

名称-值参数的默认值

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

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

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

函数MyRectangle(宽度,高度,选项)参数双宽双高选项。LineStyle (1,1) string =“ - ”选项。LineWidth (1,1) {mustBeNumeric} = 1结尾%函数代码...结尾

以下所有方法都是调用此功能的有效方法。

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

使用重复和名称-值参数

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

确定函数呼叫是否包括PlotType参数,使用isfield函数检查PlotType字段规模结构。

函数linLog (x, y,规模)参数(重复)x(1,:)乘以y (1,:)结尾参数规模。PlotType(1, 1)字符串结尾z =重塑((x, y), 1, []);如果Isfield(比例,“plottype”如果scale.plottype ==.“林”情节(z {:})elseifscale.plottype ==.“日志”重对数(z {:})结尾结尾结尾

使用或不使用name-value参数调用此函数。

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”“日志”

多个名称结构

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

其中的论点myRectangle函数的声明如下。

  • 宽度高度是double类型的必需位置参数。

  • lineOptions。线型是一个标量字符串,具有默认值“ - ”

  • lineOptions。线宽是一个标量数字,默认值1

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

  • fillOptions。模式对其价值没有限制。

函数myRectangle(宽度、高度、lineOptions fillOptions)参数width double height double lineOptions。LineStyle (1,1) string =“ - ”lineOptions。线宽(1,1){mustBeNumeric} = 1 fillOptions.Color string fillOptions.Pattern结尾%函数代码...结尾

来自类属性的名称-值参数

MATLAB中一个有用的函数语法使用类的公共属性作为名称-值参数的名称。为类定义的所有可设置属性(即所有具有public属性的属性)指定名称-值参数SetAccess),使用以下语法参数块。

structName.?类名称

函数可以使用structName.?类名称语法只有一次。因此,即使使用不同的类和结构名,函数也只能定义一个从类中获取字段名的名称-值结构。

如果类对可以通过使用属性验证分配给属性的值施加了限制,则该函数将验证应用于各个名称-值参数。有关属性验证的信息,请参见验证属性值

例如,这个函数有两个必需参数,xy的所有公共属性名和值matlab.graphics.chart.primitive.Bar类。

函数propArgs myBar (x, y)参数x (:,:) double y (:,:) double proppargs .结尾propertyCell = namedargs2cell (propArgs);栏(x, y, propertyCell {:})结尾

使用所需的输入和任何可设置的属性名称-值对调用函数。

x =[1、2、3、4、5、6];y = x ^ 2;myBar (x, y) myBar (x, y,'facecholor'“红色”“BarLayout”'被分组'

覆盖特定属性

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

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 (:,:) double y (:,:) double proppargs .propArgs.FaceColor {mustBeMember(propArgs.FaceColor,{'red','blue'})} =“蓝色”结尾propertyCell = namedargs2cell (propArgs);栏(x, y, propertyCell {:})结尾

使用两个所需的参数调用函数,xy.可选地通过条形功能支持的任何名称值对和值金宝appFaceColor可以是两种情况红色的蓝色的.其他的值FaceColor是不允许的。

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

类方法中的参数验证

验证方法输入参数在公共方法中很有用,因为对方法的调用可能不会在类代码中产生。可以在具体的类方法中使用函数参数验证。然而,抽象方法不能定义参数块。有关类方法的信息,请参见方法

如果一个classdef文件包括用于单独文件中定义的方法的方法原型,包括定义方法的单独文件中的参数块。

子类方法不继承函数参数验证。重写超类方法的子类方法应该在子类方法中使用相同的函数参数验证,这是一个良好的实践。

句柄类析构函数方法不能使用参数验证。一个方法命名删除在句柄子类中包含参数block不会被视为析构函数(在销毁对象时不会被MATLAB调用)。有关类析构函数方法的更多信息,请参见处理类的析构函数

参数验证的顺序

函数调用时,MATLAB按输入参数在参数块,从上到下。在验证下一个参数之前,每个参数都完全验证。因此,对先前声明的参数的任何引用使用已验证的值。函数由于第一个验证故障而抛出错误。

当调用函数时,经过验证的值可能与作为输入传递的原始值不同。例如,该函数将输入声明为classuint32值。第三个输入声明赋值默认值等于前两个输入的乘积。

函数c = f(a,b,c)参数A uint32 b uint32 c uint32 = A .* b .* 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在输入参数验证中执行的标准转换,可以使用验证函数来代替类和大小限制。对验证函数的调用不会返回值,也不能更改输入参数的值。

例如,该函数将第一个输入限制为类double类型的任意大小的二维数组。第二个输入必须是任何类的5乘3数组。

函数f (a, b)参数A (:,:) b (5,3)结尾%函数代码...结尾

由于标准MATLAB类型转换和标量扩展,您可以使用以下输入调用此函数而不接收验证错误。默认情况下,MATLAB将字符向量的元素转换为它们的等效数值,并应用标量扩展以从标量值创建5×3数组144

f ('字符矢量', 144)

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

函数fCustomValidators (a, b)参数a {mustBeA(a,'double'), mustBeDims(a,2)} b {mustBeSize(b,[5,3])}结尾%函数代码...结尾自定义验证器函数函数mustBeA(输入类名)%测试特定类如果〜ISA(输入,类名)错误(Input必须是类double。结尾结尾函数sizeDims mustBeSize(输入)%测试具体尺寸如果~ isequal(尺寸(输入),sizeDims)错误(['输入必须是大小'num2str (sizeDims)])结尾结尾函数numDims mustBeDims(输入)%尺寸数测试如果〜Isequal(长度(大小(输入)),numdims)错误(['Input must have 'num2str (numDims),“维度”。])结尾结尾

蜜铜mustBeDims验证函数强制输入参数的严格声明。

fCustomValidators ('字符矢量', 144)
位置1的输入参数无效。Input必须是类double

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

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

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

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

输入参数个数在参数验证

输入参数个数函数返回调用当前执行的函数时给出的函数输入参数的个数。使用函数参数验证时,返回的值输入参数个数函数内部是调用函数时提供的位置参数的数量。该值不包括函数调用中不包含的可选参数。同时,输入参数个数不计算任何名称-值参数。

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

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

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

  • isfield确定名称-值参数是否为格式传递给函数。

函数result = fNargin(a, b, c, namedargs)参数A (1,1) = b (1,1) = c (1,1) = 1格式(:1)字符结尾%函数代码开关输入参数个数情况下2结果= A + B;情况下a^c + b^c;结尾如果isfield (namedargs“格式”)格式(namedargs.format);结尾结尾

在这个函数调用中:

结果= Fnargin(3,4)
结果= 7

返回的值输入参数个数在函数中2

在这个函数调用中:

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

返回的值输入参数个数在函数中3.

在这个函数调用中:

结果= fnargin(3,4,7.62,“格式”“银行”
结果= 43020.56.

返回的值输入参数个数函数值是3。

变量和函数访问限制

函数工作区中存在参数块。如果函数使用进口命令将包、类或函数添加到函数的作用域,则相同的作用域应用于参数块。

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

函数c = f (a, b, c)参数A uint32 b uint32 c uint32 = A * b结尾%函数代码...结尾

但是,您无法引用尚未声明的输入变量参数块。例如,使用这个声明作为参数一个在前面的函数中无效,因为bc还没有被宣布。

参数A uint32 = b * c结尾

参数验证表达式只能引用以前声明,因此验证了参数。

名称值参数的验证函数和默认值无法访问其他名称值参数。

中函数的限制参数

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

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

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

另请参阅

|

相关的话题