是否可以在MATLAB中实现的匿名函数中使用可选参数?
请参见以下示例:
foo = @(x,y)(x+y+12)
y
是否可以是上述匿名函数中的可选参数,类似
foo = @(x,y?)(x+y+12)
并且仅在提供时使用y
吗?
简短的答案是no。原因如下:在MATLAB函数中,如果缺少参数,MATLAB将检查函数中是否存在任何逻辑来检查和设置任何参数。例如检查nargin
(输入参数的数量)或检查输入参数是否存在
if ~exist(y, 'var') || isempty(y)
(set y here)
end
如果MATLAB无法找到任何方法来设置缺少的参数,则会发出错误(not enough input arguments
)。匿名函数是单个表达式,因此无法包含设置缺少的参数所需的逻辑,并且MATLAB会发出not enough input arguments
错误。
HTH
MATLAB中有一个称为“可变长度输入参数列表”的概念,请参见varargin
。通常,可以在匿名函数中使用它,特别是在您的示例中:
varargin
foo = @(varargin) sum(cell2mat(varargin)) + 12;
foo(10) % 10 + 12
foo(10, 20) % 10 + 20 + 12
foo(10, 20, 30) % 10 + 20 + 30 + 12
ans = 22
ans = 42
ans = 72
是一个单元格数组,因此我们需要将其转换为常规(数字)数组。然后,我们只需要对这些值求和并添加12。
当然,仅当所有传递的参数均为某种数字类型时,该解决方案才有效。
希望有帮助!