【问题标题】:How to check whether an argument is supplied in function call?如何检查函数调用中是否提供了参数?
【发布时间】:2012-01-25 07:17:26
【问题描述】:

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

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

function dummy(arg1, arg2)
if nargin < 2
    arg2 = 0;
end
if nargin < 1
    arg1 = 0;
end
% function body

我想知道是否可以根据参数名称检查是否提供了参数?类似supplied(arg2) == false。

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

【问题讨论】:

    标签: matlab


    【解决方案1】:

    我总是这样:

    if ~exist('arg1','var')
      arg1=0;
    end
    

    正如@Andrey 所说,使用此解决方案,您可以更改函数参数的数量/顺序,而无需更改代码。 nargin 解决方案并非如此。

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

    if ~exist('arg1','var') || isempty(arg1)
      arg1=arg1DefaultValue;
    end
    

    【讨论】:

    • 这比 nargin 好得多,因为你不必更改代码,以防万一你改变了函数中参数的顺序。
    • 我通常也会添加... | isempty(arg1),所以用户可以跳过arg1,但提供arg2。当然如果arg1不能为空。
    • 绝对是,但我认为它并没有真正回答这个问题。无论如何,我编辑了答案,另外我认为如果arg1 不存在,您必须使用||(短路运算符)来确保没有错误。
    • 请注意,此处跳过意味着提供 [] 或 {} 代替参数,而不是 Visual Basic / VBScript 样式的跳过,其中可以放置多个逗号,例如 f(,,a,,,a)。
    猜你喜欢
    • 1970-01-01
    • 2015-06-20
    • 2018-07-28
    • 1970-01-01
    • 2020-10-09
    • 1970-01-01
    • 2011-06-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多