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

Matlab 对于不接受varargin的函数,narginchk(x,x)是冗余的吗?,matlab,Matlab,我对MATLAB世界还不熟悉。环顾四周,我遇到了一个函数 function out = f(x, y, z) narginchk(3, 3); out = x * y * z; % contents simplified for illustration purpose end 我不能自信地说“narginchk”是多余的,但在我看来确实如此。有人能告诉我,如果函数签名alreadys需要(这里)正好3个输入,那么是否有合法的理由将其放入 谢谢 即使没有varargin

我对MATLAB世界还不熟悉。环顾四周,我遇到了一个函数

function out = f(x, y, z)
    narginchk(3, 3);    
    out = x * y * z; % contents simplified for illustration purpose
end
我不能自信地说“narginchk”是多余的,但在我看来确实如此。有人能告诉我,如果函数签名alreadys需要(这里)正好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
函数out=f(x,y,z)
narginchk(2,3);
如果nargin<3
z=17;
终止
out=x*y*z;
终止
>>f(1,2)
ans=
34

部分混乱是您收到的错误消息的措辞。MATLAB说“没有足够的输入参数”。它的意思是“函数使用了缺少的参数。”

即使没有
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
函数out=f(x,y,z)
narginchk(2,3);
如果nargin<3
z=17;
终止
out=x*y*z;
终止
>>f(1,2)
ans=
34

部分混乱是您收到的错误消息的措辞。MATLAB说“没有足够的输入参数”。它的意思是“函数使用了缺少的参数。”

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


因此,对具有固定数量参数的函数使用
narginchk
在某种程度上是有区别的,但我认为对于您可能得到的不同类型的错误,没有很多实际用途。

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



因此,对具有固定数量参数的函数使用
narginchk
在某种程度上会有所不同,但我认为对于您可能遇到的不同类型的错误,没有很多实际用途。

我不是专家,但它似乎是多余的。我不是专家,但它似乎是多余的。谢谢您的回复。你能给我一个“调用方省略参数”的例子吗?MATLAB将允许
result=f(5)result=f(5)narginchk
行。但它是…@BenVoigt我只是记录Matlab的行为,而不是解释它。我在Matlab2013a中测试了它,这就是我得到的结果。不过,你的测试不够详细,无法揭示真实的行为。谢谢磁强计。这是充分的信息。认可的!你的回答自相矛盾。如果MATLAB检查调用参数的数量,则不会到达
narginchk
行。但它是…@BenVoigt我只是记录Matlab的行为,而不是解释它。我在Matlab2013a中测试了它,这就是我得到的。你的测试没有详细说明