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

jef*_*eff 3 matlab parameter-passing

我认为inputparser正在这样做,但我找不到一个展示如何的例子.

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

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

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

f(x, {'visualize', 0});
Run Code Online (Sandbox Code Playgroud)

在这种情况下.N100而是.visualize变成0.

我怎样才能用MATLAB实现这个目标?也不确定是否需要extraOpts参数.我当然更喜欢用function y = f(x):) 的方式

谢谢你的帮助 !

Bro*_*ves 5

您可以使用MATLAB的inputParser类:

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
Run Code Online (Sandbox Code Playgroud)

您可能需要存储解析的结果,可能包含以下内容:

inputs = p.parse(x, extraOpts{:});
do_things(inputs)
Run Code Online (Sandbox Code Playgroud)

结束编辑

或者,您可以执行类似重新定义函数以获取结构中值的数量的操作,尽管它不像输入解析器解决方案那样强大:

function y = f(N, visualize)
if nargin < 2
  visualize = 0
end
if nargin < 1
  visualize = 0
  N = 100
end
Run Code Online (Sandbox Code Playgroud)