如何检查函数调用中是否提供了参数?

fef*_*efe 38 matlab

假设我有一个函数dummy,带有2个参数.当函数调用中未提供时,参数可以具有默认值.但我怎么知道是不提供参数?

我知道我可以nargin像这样使用

function dummy(arg1, arg2)
if nargin < 2
    arg2 = 0;
end
if nargin < 1
    arg1 = 0;
end
% function body
Run Code Online (Sandbox Code Playgroud)

我想知道是否可以根据参数名称检查是否提供了参数?有点像supplied(arg2) == false.

我问这个是因为,有时我想在参数列表的前面添加新参数(因为它可能没有默认值),然后我必须改变所有if nargin ....如果我可以按名称检查,则无需更改任何内容.

Oli*_*Oli 65

我一直这样做:

if ~exist('arg1','var')
  arg1=0;
end
Run Code Online (Sandbox Code Playgroud)

正如@Andrey所说,使用此解决方案,您可以更改函数参数的数量/顺序,而无需更改代码.nargin解决方案不是这种情况.

正如@yuk所说,如果你想允许跳过你可以做的参数:

if ~exist('arg1','var') || isempty(arg1)
  arg1=arg1DefaultValue;
end
Run Code Online (Sandbox Code Playgroud)

  • 请注意,跳过这里意味着提供`[]`或`{}`代替参数,而不是Visual Basic/VBScript样式跳过,其中一个放置多个逗号,如`f(,, a ,,, a)`. (5认同)
  • 反之,但我认为它并没有真正回答这个问题.无论如何,我编辑了答案,另外我认为你必须使用`||`(短路算子)来确保如果`arg1`不存在则没有错误. (2认同)