以下代码应该成功运行。 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
答案 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"
除此之外,用于检查函数输入和设置默认值的更常用的方法是:
基于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
逻辑基于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
有关更多提示,请参阅this discussion。
这是我用来测试不同选项的内容(将以下代码保存为test_caller_nargin.m
):
function test_caller_nargin(varargin)
print_caller_nargin();
function print_caller_nargin
evalin('caller','numel(varargin)')
end
end