如何定制参数验证函数的代码建议

问题描述 投票:0回答:1

我尝试使用参数验证来要求输入是预定义字符串列表的成员,这可以使用

mustBeMember
函数来完成(见下文)。正如预期的那样,如果用户未输入有效参数,则会引发错误,此外,当用户键入函数时,代码建议会向用户显示可能选项的列表。

function out = myFunc1(arg)
    arguments
        arg {mustBeMember(arg, ["opt1", "opt2", "opt3"])};
    end
    out = arg;
end

问题是我有许多不同的函数都使用相同的字符串列表,所以我必须复制并粘贴列表,这是无法维护的。因此,我创建了一个自定义的、可重用的验证函数,其中包含内部列表(见下文)。

function out = myFunc1(arg)
    arguments
        arg {mustBeValidOption};
    end
    out = arg;
end

function mustBeValidOption(arg)
    try
        mustBeMember(arg, ["opt1", "opt2", "opt3"]);
    catch ME
        throwAsCaller(ME);
    end
end

现在我可以在多个函数中使用

mustBeValidOption
验证器。但是,代码建议不再起作用。

所以这是我的问题:如何为参数验证函数自定义代码建议?或者,有没有办法让传递到“mustBeMember”验证器的成员列表来自单独的文件?

matlab arguments
1个回答
0
投票

我认为最好的选择是使用

enumeration
作为 参数类型。 (您可以使用“functionSignatures.json”...但我认为这最终会导致更多重复)。例如:

% ValEnum.m - enumeration of allowed options
classdef ValEnum
    enumeration
        opt1
        opt2
        opt3
    end
end
function out = fcn1(arg, thing)
    arguments
        arg (1,1) double
        thing (1,1) ValEnum
    end
    out = string(arg) + ":fcn1:" + string(thing);
end

这是我输入“fcn1(3, Tab”后发生的情况:

© www.soinside.com 2019 - 2024. All rights reserved.