根据必需参数的值为可选参数添加函数参数验证
Add function argument validation for optional parameters based on the values of required parameters
我有一个这样的函数签名:
function MyFunc(a, b, options)
%% Function argument validation
arguments
%% @Required parameters:
a (1,1) {mustBeInteger, mustBePositive}
b (1,1) {mustBeInteger, mustBePositive}
%% @Optional parameters:
options.n_bar (1,1) {mustBeInteger, mustBeLessThanOrEqual(options.n_bar, a*b*2)} % !!!Error!!!
end
% ... Function body of MyFunc goes here ...
我想根据 a
和 b
的值在 options.n_bar
上添加约束,这样 options.n_bar <= a*b*2
。我试图如上面的代码片段所示那样实现它,但是 MATLAB 不允许我以这种方式做到这一点。我怎样才能让它发挥作用?
参数块中的验证器函数调用内部唯一允许的是常量表达式,如 "string"
或 123
,或先前声明的参数。
这阐明了输入参数之间的依赖关系。这个用例很适合自定义验证器函数。
function MyFunc(a, b, options)
arguments
a (1,1) {mustBeInteger, mustBePositive}
b (1,1) {mustBeInteger, mustBePositive}
options.n_bar (1,1) {myMustBeLessThanOrEqual(options.n_bar, a, b)}
end
end
function myMustBeLessThanOrEqual(w, x, y)
mustBeLessThanOrEqual(w, x*y*2);
end
上面的自定义验证器 myMustBeLessThanOrEqual
包含受支持的表达式,并且在自定义验证器内部可以使用任何自定义验证逻辑。
我有一个这样的函数签名:
function MyFunc(a, b, options)
%% Function argument validation
arguments
%% @Required parameters:
a (1,1) {mustBeInteger, mustBePositive}
b (1,1) {mustBeInteger, mustBePositive}
%% @Optional parameters:
options.n_bar (1,1) {mustBeInteger, mustBeLessThanOrEqual(options.n_bar, a*b*2)} % !!!Error!!!
end
% ... Function body of MyFunc goes here ...
我想根据 a
和 b
的值在 options.n_bar
上添加约束,这样 options.n_bar <= a*b*2
。我试图如上面的代码片段所示那样实现它,但是 MATLAB 不允许我以这种方式做到这一点。我怎样才能让它发挥作用?
参数块中的验证器函数调用内部唯一允许的是常量表达式,如 "string"
或 123
,或先前声明的参数。
这阐明了输入参数之间的依赖关系。这个用例很适合自定义验证器函数。
function MyFunc(a, b, options)
arguments
a (1,1) {mustBeInteger, mustBePositive}
b (1,1) {mustBeInteger, mustBePositive}
options.n_bar (1,1) {myMustBeLessThanOrEqual(options.n_bar, a, b)}
end
end
function myMustBeLessThanOrEqual(w, x, y)
mustBeLessThanOrEqual(w, x*y*2);
end
上面的自定义验证器 myMustBeLessThanOrEqual
包含受支持的表达式,并且在自定义验证器内部可以使用任何自定义验证逻辑。