arguments
语法
argumentsargName1 (dimensions) class {validators} = defaultValue
...argNameN ...
end arguments (Repeating)argName1 (dimensions) class {validators} = defaultValue
...argNameN ...
end arguments (Output)argName1 (dimensions) class {validators}
...argNameN ...
end arguments (Output,Repeating)argName (dimensions) class {validators}
end
说明
输入参数块
arguments ... end
声明函数的输入参数。参数块是可选的。如果包含一个或多个 arguments
块,它们必须出现在函数的第一个可执行代码行之前。MATLAB® 将任何未显式标记为 Input
或 Output
的参数块视为输入块。
每个参数可以有一个或多个约束或一个默认值,如以下语法所示:
argName (dimensions) class {validators} = defaultValue
- 输入大小,指定为包含两个或多个数值的以逗号分隔的列表,如(dimensions)
(1,2)
、(3,5,2)
或(1,:)
。冒号表示该维度可以包含任意长度。
不能包含表达式。(dimensions)
输入的维度必须与
完全匹配,或与(dimensions)
指定的大小兼容。例如,(dimensions)
(1,:)
指定输入必须为 1×n 行向量,但 n×1 列向量是兼容的。该函数将行向量输入重构为列向量。同样,大小为(2,3)
的值允许标量输入,但它将输入扩展为 2×3 矩阵。有关详细信息,请参阅 基本运算的兼容数组大小。
- 按名称指定的类或 MATLAB 数据类型,如class
double
。输入必须为指定的类型或可以转换为该类型的类型。例如,指定double
的函数接受single
类的值并将它们转换为double
。有关转换的详细信息,请参阅Implicit Class Conversion。
- 以逗号分隔的验证函数(如{validators}
mustBeNumeric
和mustBeScalarOrEmpty
)列表,用花括号括起来。当输入参数与其条件不匹配时,验证函数会出错。与
不同,验证函数不修改输入参数。有关验证函数的列表,请参阅 参数验证函数。class
- 默认值必须符合指定的大小、类型和验证规则。默认值也可以是表达式。指定默认值会使该参数成为可选参数。可选参数必须位于函数签名中和defaultValue
arguments
块中的必需参数后。
对于名称-值参数,
使用 arg
的形式,其中 nv.name
是函数签名中的结构体名称,nv
是参数块中的参数名称。例如,使用名为 name
options
的结构体定义接受名称-值参数的函数。
y = myFunction(x,options)
在参数块中,将名称-值参数的名称指定为字段:
arguments x options.Name1 options.Name2 end
有关通常情况下使用 arguments
块的详细信息,请参阅 arguments 代码块语法。
输出参数块
arguments (Output) ... end
声明函数的输出参数。输出参数块是可选的。如果包含一个或多个输出 arguments
块,它们必须出现在所有输入块之后,函数的第一个可执行代码行之前。当在函数中同时包含输入和输出块时,为了提高可读性,建议显式包含 (Input)
和 (Output)
属性。请参阅使用参数验证重复输出中的示例。(从 R2022b 开始)
与输入参数一样,输出参数也可以有一个或多个约束,如以下语法所示:
argName (dimensions) class {validators}
有关其他详细信息,请参阅 arguments ... end
的描述。与输入参数不同,输出参数无法定义默认值,应用于输出参数的验证函数无法引用早期的输出参数。
arguments (Output,Repeating) ... end
为函数声明重复输出参数。可以对重复输出参数使用参数验证,但每个函数只能定义一个重复输出参数。varargout
可以出现在重复输出参数块中,只要它是唯一的输出参数即可。(从 R2022b 开始)
示例
局限性
嵌套函数、抽象方法或句柄类析构函数方法不支持参数块。
详细信息
提示
使用数据类型限制会导致输入参数的隐式转换。例如:
对于此函数,如果将字符串function y = myFunction(inputArg1) arguments inputArg1 (1,1) double end ...
"123"
作为输入参数传递,则 MATLAB 会将字符串转换为double
类型的数值123
。验证函数不会以任何方式更改输入值,因此为了避免数据类型转换,请使用一个或多个验证器函数而不是数据类型来限制输入。例如:
要避免将字符串转换为数值,请使用
mustBeA
、mustBeFloat
或mustBeNumeric
。要避免将数值转换为字符串,请使用
mustBeText
、mustBeTextScalar
或mustBeNonZeroLengthText
。要避免大小转换,请使用
mustBeVector
或mustBeScalarOrEmpty
。