如果我有一个MATLAB实验室文件包含函数foo
function [test] = foo(a,b);
test = a+b
如果我想修改该函数,foo还会在我的输入中收到添加数据c
在相同的MATLAB文件中
function [test] = foo(a,b,c);
test = a+b+c;
我可以这样做吗? (我尝试类似的但是当我尝试使用它时说我需要进行许多论证。)
答案 0 :(得分:1)
varargin
方法在这里是合适的,尽管我的方法略有不同(见下文)。但是,您可以使用exist
(或通过nargin
来测试第三个参数是否存在,但这不是直接且容易出错的。)
exist
function test = foo(a,b,c)
if exist('c','var'), % nargin>2
test = a + b + c;
else
test = a + b;
end
与代码注释一样,对nargin
的测试也是可能的,但exist
调用的模糊性要小得多,如果修改了参数列表(例如顺序),则不需要更改。
varargin
请注意,varargin
不需要是函数声明中的唯一参数:
function test = foo(a,b,varargin)
if nargin>2, % numel(varargin)>0
test = a + b + varargin{1};
else
test = a + b;
end
另外,假设您希望获得任意数量的额外输入(例如foo(a,b,c,d,...)
),您可以使用varargin
单元格数组进行操作。例如,您可以[varargin{:}]
将元素水平连接到一个新数组。对于垂直连接,您可以执行vertcat(varargin{:})
。我假设a+b+c
示例只是一个示例,所以我不会在实践中展示这一点,但你可以按照自己喜欢的方式使用这些数组。
答案 1 :(得分:0)
你可以这样写:
function [test] = foo (varargin)
y = 0 ;
for i = 1:length(varargin)
y = y+ varargin(i) ;
end
test = y ;
end
你可以提供任意数量的参数。你可以在这里阅读更多关于varargin的内容:enter link description here
答案 2 :(得分:0)
支持此问题的最简单方法可能是
function [test] = foo (varargin)
test = sum ([varargin{:}]);
end
这将允许任意数量的输入。如果你想限制为2,3个输入,那么
function [test] = foo (varargin)
narginchk (2, 3);
test = sum ([varargin{:}]);
end
如果你想避免varargin
,另一种方法是将最后一个元素设置为默认值为0,这样如果没有定义它就不会影响操作:
function [test] = foo (a, b, c = 0)
test = a + b + c;
end
编辑:我不确定这一点,但上面设置默认值的方法,可能只是八度,但尚未在Matlab中实现。