对于不接受varargin的函数,narginchk(x,x)是多余的吗?

时间:2014-09-12 15:20:50

标签: matlab

我是MATLAB世界的新手。环顾四周,我遇到了一个看起来像

的功能
function out = f(x, y, z)
    narginchk(3, 3);    
    out = x * y * z; % contents simplified for illustration purpose
end

我无法自信地说“narginchk”是多余的,但对我来说肯定是这样。如果函数签名alreadys需要(这里)正好3个输入,有人可以告诉我是否有任何合理的理由将其放入?

谢谢!

2 个答案:

答案 0 :(得分:3)

即使没有varargin,调用者也可以省略参数。因此需要narginchk来抓住它。

varargin主要用于标记选项,您无法仅根据位置为参数指定有意义的名称。

这是一个小型演示,默认情况下MATLAB使所有参数都是可选的:

function out = f(x, y, z)
    narginchk(2, 3);
    if nargin < 3
        z = 17;
    end
    out = x * y * z;
end

>> f(1,2)

ans =

    34

部分混淆是您收到的错误消息的措辞。 MATLAB说“没有足够的输入参数。”这意味着“该函数使用了一个缺失的参数。”

答案 1 :(得分:1)

在这种形式下,它是多余的。但是,如果没有足够的参数传递给函数,则会抛出不同的错误,具体取决于您是否使用narginchk。 如果您尝试在没有f(1,2)的情况下执行narginchk(3,3),则抛出的错误类型为MATLAB:minrhs。如果narginchk(3,3)到位,则抛出的错误类型为MATLAB:narginchk:notEnoughInputs。 但是,如果您尝试使用太多参数,例如f(1,2,3,4),错误始终为MATLAB:TooManyInputs

类型

因此,对于具有固定数量参数的函数,使用narginchk会产生影响,但我不认为您可以获得的不同类型的错误有很多实际用途。< / p>