匿名函数是否支持可选参数?

问题描述 投票:0回答:2

是否可以在MATLAB中实现的匿名函数中使用可选参数?

请参见以下示例:

foo = @(x,y)(x+y+12)

y是否可以是上述匿名函数中的可选参数,类似

foo = @(x,y?)(x+y+12)

并且仅在提供时使用y吗?

matlab anonymous-function optional-parameters
2个回答
0
投票

简短的答案是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


0
投票

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。

当然,仅当所有传递的参数均为某种数字类型时,该解决方案才有效。

希望有帮助!

© www.soinside.com 2019 - 2024. All rights reserved.