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

时间:2015-11-04 15:21:49

标签: matlab

以下代码应该成功运行。 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

1 个答案:

答案 0 :(得分:3)

这是我在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

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

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