我认为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)
的方式:)
感谢您的帮助!
答案 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
缺点是我需要将两个输入x
和extraOpts
分开,并且必须将f2
作为子例程调用,在与f
相同的文件中定义。也许有一种更优雅的方式(即不需要其他功能的方式),但我见过的example也是这样做的,因为它有效,对我有好处。)