我尝试使用参数验证来要求输入是预定义字符串列表的成员,这可以使用
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”验证器的成员列表来自单独的文件?
我认为最好的选择是使用
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”后发生的情况: