主要内容

参数

声明函数参数验证

自从R2019b

语法

参数argName1{验证器}= defaultValue(维度)类argNameN……最终参数(重复)argName1{验证器}= defaultValue(维度)类argNameN……最终参数(输出)argName1(维度)类{验证器}argNameN……最终参数(输出,重复)argName(维度)类{验证器}结束

描述

输入参数块

例子

参数……结束声明一个函数的输入参数。块的参数是可选的。如果你包括一个或多个参数块,他们必须出现在第一个可执行的函数。MATLAB®对待任何争论块,未能明确标示输入输出作为输入。

每个参数可以有一个或多个限制或默认值,如图所示的语法:

argName{验证器}= defaultValue(维度)类

  • (尺寸)——输入大小,指定为一个以逗号分隔的两个或两个以上的数字,等(1、2),(3、5、2),或(:1)。冒号允许任何长度尺寸。(尺寸)不能包含表达式。

    输入的尺寸必须匹配(尺寸)完全或兼容的指定的大小(尺寸)。例如,(:1)指定的输入必须是1 -n行向量,但一个n1列向量是兼容的。功能重塑一个行向量输入一个列向量。同样,一个尺寸的(2、3)允许输入标量,但它扩展了2×3矩阵的输入。看到兼容数组大小的基本操作为更多的信息。

  • ——类或MATLAB数据类型指定的名字,等。输入必须是指定的类型或类型可以转换为该类型。例如,一个指定的函数接受的值类并将它们转换成。关于转换的更多信息,请参阅隐式类转换

  • {验证器}——以逗号分隔的验证功能,例如mustBeNumericmustBeScalarOrEmpty,包含在花括号。验证功能错误当输入参数不匹配他们的条件。不像不要修改输入参数,验证功能。验证函数的列表,请参阅参数验证功能

  • defaultValue——默认值必须符合指定的大小,类型和验证规则。默认值也可以是一个表达式。指定一个默认值的参数可选。可选参数必须定位在所需参数和函数签名参数块。

名称-值参数,参数使用表单nv.name,在那里nv函数签名和结构名称的名字是块中的参数名称参数。例如,定义一个函数,它接受名称参数使用结构命名选项

y = myFunction (x,选项)

在块的参数,指定名称参数作为字段的名称:

参数x选项。Name1选项。Name2结束

使用的更多信息参数块,明白了参数块语法

例子

参数(重复)…结束声明重复输入参数。

例如,如果您创建一个函数命名myplot使用重复的参数X,Y,风格,该函数接受多个组这三个参数,如style1 myplot (x1, y1, x2, y2, style2)。MATLAB创建一个单元阵列,其中包含所有传入的参数的值。

函数可以只包括一个重复输入参数块。如果函数包括重复和名称参数,在自己的声明名称参数,参数块后重复参数块分开。

与重复使用验证参数的更多信息,参见验证重复参数

输出参数块

例子

参数(输出)……结束声明一个函数的输出参数。输出参数的块是可选的。如果包含一个或多个输出参数块,他们必须出现在所有输入块之前第一个可执行的函数。包括输入输出模块在一个函数,包括(输入)(输出)属性明确建议可读性。看到重复输出参数验证了一个例子。(因为R2022b)

输入参数、输出参数可以有一个或多个限制,这种语法所示:

argName(维度)类{验证器}

请查看描述参数……结束额外的细节。与输入参数、输出参数不能定义一个默认值,和验证函数应用到一个输出参数不能早些时候引用一个输出参数。

例子

输出参数(重复)……结束声明一个重复输出参数的函数。您可以使用参数验证重复输出参数,但是您可以定义每个函数只有一个重复的输出参数。varargout可以出现在一个重复的输出参数块只要是唯一的输出参数。(因为R2022b)

例子

全部折叠

编写一个函数,对输入参数的大小限制在一个行向量的长度。使用验证函数向量的数值限制元素。

函数[m s] = twoStats (x)参数x(:1){mustBeNumeric}结束m =意味着(x,“所有”);s =性病(x, 1,“所有”);结束

调用该函数在三元素的行向量。

一个= [1 3 5];[m s] = twoStats (a)
m = 3 s = 1.6330

调用函数与一个列向量也是有效的,因为行和列向量是兼容的。

= (1 3 5)';[m s] = twoStats (a)
m = 3 s = 1.6330

如果你调用这个函数包含非数字值的一个向量,mustBeNumeric验证函数将抛出一个错误。

= (“1”“3”“5”];[m s] = twoStats (a)
错误使用twoStats无效的论点在位置1。值必须为数字。

声明可选名称参数为一个函数,函数声明中包括结构名称,定义参数名称字段的结构参数块。

声明myRectangle函数与选项作为一个结构名称。的两个字段选项,线型线宽名字的函数的名称参数:

函数myRectangle (X, Y,选项)参数XYoptions.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之前,通过名称字符串或字符向量和独立的名称和值用逗号。语法都是有效的在以后的版本。

重复参数单参数或参数组,可以重复零个或多个次函数调用。的fRepeat函数接受重复的一组参数x,y,风格。限制输入参数xy向量的双值或值可兑换双打。限制风格的字符串”——“”:“

函数fRepeat (x, y,风格)参数(重复)x(:1)增加一倍y(:1)增加一倍风格{mustBeMember(风格,[”——“,”:“])}结束%重塑细胞阵列的输入和调用绘图函数z =重塑([x, y,风格]1 []);如果~ isempty (z)情节(z {:});结束结束

调用fRepeat两组的输入。MATLAB创建一个单元阵列包含所有传入的值x,另一个数组的值y,三分之一的价值风格。函数然后重塑这些数组变成1-by-6单元阵列,z,并将其传递到情节

x1 = 1:10;日元= 1:10;s1 =”:“;x2 = 1:7;y2 = 1:1.5:10;s2 =”——“;s1 fRepeat (x1, y1, x2, y2, s2)

图显示两行

写一个函数,旋转一个二维方形贴片点(0.4,0.4),指定数量的度。返回x- - -y最终的图像的坐标作为输出参数,并限制这些价值观是积极的。换句话说,这个函数应该返回只有当坐标旋转的最终结果是完全在第一象限。

函数[xfinal, yfinal] = rotatePatch(角)参数(输出)xfinal{mustBePositive}yfinal{mustBePositive}结束x = (0.1 - 0.1 0.7 - 0.7);y = (0.1 - 0.7 0.7 - 0.1);p =补丁(x, y,“红色”);旋转(p(0 0 1),角,0.4 - 0.4 [0])xfinal = p.Vertices (: 1);yfinal = p.Vertices (:, 2);结束

调用该函数的角度15度。这个旋转不移动任何顶点的第一象限,那么函数返回没有错误。

(x1, y1) = rotatePatch (15)
x1 = 0.1879 0.0326 0.6121 0.7674日元= 0.0326 0.6121 0.7674 0.1879

情节的红场逆时针旋转15度

调用这个函数有35度角,这举动左下顶点第一象限。消极的x协调不满足输出参数验证,这个函数返回一个错误。

(x2, y2) = rotatePatch (35)
输出“xfinal”无效。值必须是积极的。错误rotatePatch(12)行结束

的两个红色方块旋转逆时针15到35度

编写一个函数,它接受重复对向量和返回每一对的总和。限制行向量的输入和输出。

函数vectorSum = repeatSum (a, b)参数(重复输入)(:1)b(:1)结束参数(重复输出)vectorSum(:1)结束n =元素个数(一个);vectorSum {n} = {n} + b {n};i = 1: n - 1 vectorSum{我}={我}+ b{我};结束结束

计算最终的输出和分配vectorSum {n}之前循环单元阵列的预分配空间。扩大单元阵列在没有预先配置的循环可以对性能有负面影响。

定义向量的两双。调用repeatSum的两对作为输入。输入参数块验证列向量转化为行向量,因为他们是兼容的大小。

x1 = (1 - 2);日元= [3 - 4];x2 = [1;0);y2 = [0;1);[sum1, sum2] = repeatSum (x1, y1, x2, y2)
6 sum2 sum1 = 4 = 1 1

因为输入限制为行向量,每一对向量的和总是一个行向量。然而,输出验证有助于确保函数产生的行向量即使函数修正在稍后的日期。例如,如果输入验证被改变了mustBeVector函数,对可能是由一个行向量和列向量没有转换。在这种情况下,的总和x1y2是一个矩阵。

x1 + y2
ans = 1 2 2 3

修改后的输出repeatSum将错误,因为矩阵不会通过输出验证。

限制

  • 参数块不支持嵌套函数,抽象方法,或者处理类析构函金宝app数方法。

更多关于

全部折叠

金宝app支持的数据类型

参数声明可以指定任何MATLAB类或外部定义的类,由MATLAB支持,除了Java类,定义COM类和MATLAB类在MATLAB软件7.6版本(换句话说,类定义,不使用金宝appclassdef关键字)。

提示

  • 使用数据类型的限制可能导致输入参数的隐式转换。例如:

    函数y = myFunction (inputArg1)参数inputArg1(1,1)双头……
    这个函数,如果你通过字符串“123”MATLAB作为输入参数,将字符串转换为数值123年类型的

    验证函数不以任何方式改变输入值,所以为了避免数据类型转换,使用一个或多个验证器函数,而不是限制输入数据类型。例如:

    • 为了避免字符串转换成数值,使用mustBeA,mustBeFloat,或mustBeNumeric

    • 为了避免数值转换成字符串,使用mustBeText,mustBeTextScalar,或mustBeNonZeroLengthText

    • 为了避免尺寸转换,使用mustBeVectormustBeScalarOrEmpty

扩展功能

版本历史

介绍了R2019b

全部展开