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