matlab与和或可以同时使用,matlab – 我们可以一起使用addOptional和addParameter吗?...

我不建议将inputParser与允许为字符数组的可选参数一起使用,因为parse()无法区分用户是否传递参数名称(总是为char类型)或可选的输入参数.因此,这种行为的逻辑结果是您无法将char作为可选输入参数传递.

但是,如果为可能是char的可选输入参数指定验证函数,则可以使其工作.从“提示”部分的addOptional文档中:

For optional string inputs, specify a validation function. Without a validation function, the input parser interprets valid string inputs as invalid parameter names and throws an error.

这是您的示例生成的错误.

修复你的例子

‘o’是可选的输入参数.如果您知道如何验证值’o’需要接受,请提供一个验证函数,该函数对这些有效输入返回true.例如,如果您知道’o’将始终是char数组,请尝试以下(逐行).

a = inputParser;

addOptional(a, 'o', 'default', @ischar);

addParameter(a, 'p', 1);

parse(a, 'x'); % OK

parse(a, 'Hello, World!', 'p', 2); % OK

parse(a, 'p', 'p', 'p') % OK, although quite cryptic

parse(a, 3); % Throws an error, as expected, because 3 is not a char

parse(a, 'p', 4) % Throws a somewhat unexpected error, because we meant to set parameter 'p' to value 4

最后一行似乎违反直觉,但事实并非如此!我们希望解析器检测参数’p’而不是隐式假设它是我们为可选参数’o’提供的字符,我们想省略它.不过,正如我现在要解释的那样,这是预期的行为.

为什么char选项会给inputParser带来困难

预期的bahviour是预期的,因为可选参数和参数参数都不是必需的,即可选的.如果你有两个可选的输入参数,’o1’和’o2′,它们的顺序对输入解析器很重要(这就是MATLAB文档称它们为’可选位置参数’的原因).你永远不能在’o1’的值之前传递’o2’的值.这意味着只有在指定’o1’时才能使用’o2′.换句话说,’o1’阻止使用任何其他可选参数.

参数也是如此,它应该始终位于其他可选输入参数之后(如您所引用的那样).因此,如果允许任何可选输入参数为char,则它们的行为类似于可选项.结果是MATLAB的inputParser不知道char输入是可选的输入参数还是参数. MATLAB的开发人员决定要求显式排序可选输入,因此MATLAB可以确定将哪些可选参数传递给parse().

如果可选输入可能是char,则建议采取措施

因为使用可选的输入参数需要MATLAB假设某些输入参数引用可选的输入参数,其他引用参数,如果未指定所有可选参数,这可能导致最终用户意外的错误,行为或结果.

如果明确写入以防止这种意外的隐式行为,则输入参数方案会更好.我建议如果需要接受char输入的可选输入参数,你总是使用addParameter创建参数,即名称 – 值对参数.使用接受char输入的可选输入参数仅在不使用任何参数时有效,或者通过显式声明(例如在帮助中)当且仅当同时给出所有可选输入参数时才能使用参数输入参数.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值