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

时间:2015-11-21 21:45:22

标签: matlab parameter-passing

我认为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)的方式:)

感谢您的帮助!

2 个答案:

答案 0 :(得分: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

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

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

答案 1 :(得分:0)

我无法解决问题,但是我找到了另一个使用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作为子例程调用,在与f相同的文件中定义。也许有一种更优雅的方式(即不需要其他功能的方式),但我见过的example也是这样做的,因为它有效,对我有好处。)