根据必需参数的值为可选参数添加函数参数验证

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 ...

我想根据 ab 的值在 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 包含受支持的表达式,并且在自定义验证器内部可以使用任何自定义验证逻辑。