gpt4 book ai didi

matlab - 如何在 Matlab 2015b 中获取调用函数的参数个数?

转载 作者:太空宇宙 更新时间:2023-11-03 20:28:35 25 4
gpt4 key购买 nike

下面的代码应该可以成功运行。 assert语句在Matlab2014b中通过,但在Matlab2015b中失败。

在 Matlab2015b 中如何获取调用函数的参数个数?

function test()
fnA(1);
end

function fnA(A1, A2)
n = nargin;
fnB(1, 2);
assert(n==A2, '%d does not equal %d', n, A2);
end

function fnB(B1, B2)
n = evalin('caller', 'nargin');
assignin('caller', 'A2', n);
end

最佳答案

这是我在 MATLAB 2015b 上设法做到的:

evalin('caller','numel(varargin)'); %// If you are/don't mind using varargin @ caller

或者,在调用者中将 nargin 分配给一个变量(例如 narg = nargin;),然后你可以使用:

evalin('caller','narg'); %// If you assigned the caller's nargin to "narg"

除此之外,检查函数输入和设置默认值的更常用方法是:

  1. 基于nargin的逻辑:

    function test_func1(arg1, arg2, arg3)
    if nargin < 3 %// 2, 1 or 0
    arg3 = default_val_3;
    end
    if nargin < 2 %// 1 or 0
    arg2 = default_val_2;
    end
    if ~nargin %// same as nargin==0
    arg1 = default_val_1;
    end
    ... // rest of your code
    end
  2. 基于exist变量的逻辑:

    function test_func1(arg1, arg2, arg3)
    if ~exist('arg3','var'), arg3 = default_val_3; end
    if ~exist('arg2','var'), arg2 = default_val_2; end
    if ~exist('arg1','var'), arg1 = default_val_1; end
    ... // rest of your code
    end
  3. 参见 this discussion了解更多想法。


这是我用来测试不同选项的(将以下代码保存为test_caller_nargin.m):

function test_caller_nargin(varargin)

print_caller_nargin();

function print_caller_nargin
evalin('caller','numel(varargin)')
end

end

关于matlab - 如何在 Matlab 2015b 中获取调用函数的参数个数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33525537/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com