function - 在 MATLAB 中对具有默认值的多个参数使用 varargin
问题描述
有没有办法通过以下方式在 MATLAB 中使用 varargin 提供参数?
功能
func myFunc(varargin)
if a not given as argument
a = 2;
if b not given as argument
b = 2;
if c not given as argument
c = a+b;
d = 2*c;
end
我想用 b = 3 调用上述函数一次,而前一个函数在同一个命令窗口中以 a = 3 和 c = 3 运行,这次让 b 取函数中的默认值。如何使用 varargin 来完成?
解决方案
这里有两种自 2007a 以来就可以使用的方法(即很长一段时间!)。有关更新的方法,请参阅Edric 的回答。
- 使用
nargin
并确保您的输入始终井井有条 - 使用名称-值对和输入解析器
nargin
:稍微简单但依赖于一致的输入顺序
function myFunc( a, b, c )
if nargin < 1 || isempty(a)
a = 2;
end
if nargin < 2 || isempty(b)
b = 2;
end
if nargin < 3 || isempty(c)
c = a + b;
end
end
使用isempty
检查,您可以选择仅提供稍后的参数,例如myFunc( [], 4 )
,仅设置b=4
并使用默认值。
inputParser
: 更灵活但不能直接处理c=a+b
默认值
function myFunc( varargin )
p = inputParser;
p.addOptional( 'a', 2 );
p.addOptional( 'b', 2 );
p.addOptional( 'c', NaN ); % Can't default to a+b, default to NaN
p.parse( varargin{:} );
a = p.Results.a;
b = p.Results.b;
c = p.Results.c;
if isnan(c) % Handle the defaulted case
c = a + b;
end
end
这会像myFunc( 'b', 4 );
. 由于名称-值对,这种方法也与输入顺序无关,因此您也可以执行类似的操作myFunc( 'c', 3, 'a', 1 );
推荐阅读
- r - 需要在数据表的一行中应用条件格式
- python - 使用ansible在本地运行python脚本传递远程主机有输入
- php - 谷歌分析,php api,请求时间
- json - 在 Swift 中访问嵌套数据
- lua - 我可以使用 table.concat 作为一组参数吗?
- python - PyQt5 到 PySide2,在不同的类中加载 UI 文件
- c# - C#:如何设置 Fody Nullguard
- ruby-on-rails - #
- netflix-eureka - 如何在TIBCO BE和BW中调用Spring cloud eureka服务。有可能吗?
- javascript - formvalidation.io 隐藏字段 Internet Explorer 错误