如何解析 MATLAB 中的可选输入?

How to parse optional inputs in MATLAB?

我认为 inputparser 正在这样做,但我找不到说明如何做的示例。

在我的函数中,我定义了一个名为 opts 的结构,其中包含控制函数的参数。示例:

function y = f(x, extraOpts)
  opts= struct( ...
   'N', 100, ...
   'visualize', 1, ... % etc
  ); 
  do_things(x, opts);
end

opts 的字段具有默认值,但我希望能够有选择地更改它们。所以我想用这样的方式调用函数:

f(x, {'visualize', 0});

在这种情况下 .N 仍然是 100.visualize 变成 0.

如何使用 MATLAB 实现此目的?也不确定它是否需要 extraOpts 参数。我当然更喜欢 function y = f(x) :)

感谢您的帮助!

您可以使用 MATLAB 的 inputParser class:

http://www.mathworks.com/help/matlab/ref/inputparser-class.html http://blogs.mathworks.com/community/2012/02/13/parsing-inputs/

编辑:我想我也会把代码放进去...

function y = f(x, extraOpts)
    p = inputParser;
    p.addRequired('x', @(x) length(x)>1);
    p.addOptional('visualize', 1, @isscalar);
    p.addOptional('N', 100, @isscalar);
    p.parse(x, extraOpts{:});
    do_things(x, extraOpts);
end

您可能需要存储解析结果,可能类似于:

inputs = p.parse(x, extraOpts{:});
do_things(inputs)

编辑结束

或者,您可以重新定义函数以获取结构中的值数量,尽管它不如输入解析器解决方案强大:

function y = f(N, visualize)
if nargin < 2
  visualize = 0
end
if nargin < 1
  visualize = 0
  N = 100
end

我无法使答案有效,但我找到了另一个使用 inputParser 的解决方案,让我粘贴在这里以供将来参考:

function y = f2(extraOpts)
p = inputParser;
p.addParamValue('par1', 'defaultValue1');
p.addParamValue('par2', def2, @isnumeric);
p.addParamValue('par3', def3, @isnumeric);
p.parse(extraOpts{:});
extraOpts = p.Results;
end

缺点是我需要将两个输入 xextraOpts 分开,并且必须将 f2 作为子程序调用,与 [=14= 在同一文件中定义].也许有一种更优雅的方式(即不需要其他功能的方式),但我看到的 example 也是这样做的,并且因为它有效,所以对我有好处:)