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)
在这种情况下.N仍100而是.visualize变成0.
我怎样才能用MATLAB实现这个目标?也不确定是否需要extraOpts参数.我当然更喜欢用function y = f(x):) 的方式
谢谢你的帮助 !
您可以使用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)