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:报错“输入参数太多”。
函数定义
2
3
4
5
6
arguments
x
end
y = x;
end函数调用
2
3
4
错误使用 myFunction
输入参数太多。
例子2:报错“函数要求名称 ‘Name1’ 之前恰好有 1 个位置输入”。
函数定义
2
3
4
5
6
7
8
9
10
arguments
x
options.Name1
options.Name2
end
y = x;
disp(options);
end函数调用
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 中国