Matlab arguments 是Matlab 2019才有的语法,它让Matlab 编写函数能以更简单的设置函数默认参数、支持键值对传参、支持参数验证以及自动参数类型转化等功能。习惯Python简单粗暴的编写函数的我,总算因为arguments这个语法,对Matlab的函数编写少了一丝敌意。目前class也是能用arguments语法对类属性进行设置。
语法概览
1 | arguments % 基本语法 |
argName (dimensions) class {validators} = defaultValue
-
(dimensions)
:输入大小,指定为包含两个或多个数值的以逗号分隔的列表,如(1,2)
、(3,5,2)
或(1,:)
。冒号表示该维度可以包含任意长度。(1, 1)
:表示标量(1, :)
:表示行向量(:, 1)
:表示列向量(: , :)
:表示必须是3行的矩阵.(3, 4)
:表示必须是3行, 4列的矩阵.
-
class
:输入变量的类型:double
,string
,char,
cell,
或者自定义的class。如果变量类型不符合,会自动进行转化,比如double类型被转化为uint8。 -
{validators}
- 用于参数验证的函数,验证函数支持自定义。 有关验证函数的列表,请参阅 参数验证函数。举例:mustBeNumeric
、mustBeNumericOrLogical
、mustBeVector
mustBeText
、mustBeTextScalar
或mustBeNonZeroLengthText
- 将
style
限制为字符串"--"
和":"
:style {mustBeMember(style,["--",":"])}
-
defaultValue
- 默认值必须符合指定的大小、类型和验证规则。默认值也可以是表达式。指定默认值会使该参数成为可选参数,函数调用传参时候可以不用传。可选参数必须位于函数签名中和arguments
块中的必需参数后。
我的使用笔记
支持设置默认参数
默认参数:像python一样设置默认参数
1 | function power_set_supply(app, options) |
默认参数还可以是表达式
1 | function y = clip(x,x_min,x_max) |
class的properties也可以设置默认值等arguments的语法
1 | classdef ColorInRGB |
参数验证
除了验证是数字、文本外,下面这个示例还可以设置style必须是指定的字符。
1 | function fRepeat(x,y,style) |
支持自动转化Output数据类型
自动把输出图像变为uint8类型。
1 | function rgb_image = rgb_add_area(rgb_image,roi_position,colormaps) |
支持name=value设置参数
设置默认参数后,函数调用的时候没输入参数也能使用
函数定义
1 | function y = myFunction(x,options) |
函数调用
1 | >> myFunction(1,Name1="Hello",Name2="Matlab") |
⚠注意:错误使用的常见报错
以下两个例子都是对位置参数使用键值对传参,导致的错误
例子1:报错“输入参数太多”。
函数定义
1
2
3
4
5
6 function y = myFunction(x)
arguments
x
end
y = x;
end函数调用
1
2
3
4 >> myFunction(x=1)
错误使用 myFunction
输入参数太多。例子2:报错“函数要求名称 ‘Name1’ 之前恰好有 1 个位置输入”。
函数定义
1
2
3
4
5
6
7
8
9
10 function y = myFunction(x,options)
arguments
x
options.Name1
options.Name2
end
y = x;
disp(options);
end函数调用
1
2
3
4
5
6
>> myFunction(x=1,Name1="Hello",Name2="Matlab")
错误使用 myFunction
myFunction(x=1,Name1="Hello",Name2="Matlab")
↑
位置 2 处的参数无效。 函数要求名称 'Name1' 之前恰好有 1 个位置输入。
官方示例
见:声明函数参数验证 - MATLAB arguments - MathWorks 中国