盲目地调整工作区中的值是非常不可取的,并且可能导致难以检测错误并使代码难以维护。反对这个论据本质上反映了arguments against global variables。明确控制要操纵的数据将更为可靠。是的,这可能会要求您以不同方式存储数据。
例如,你可以使用一个structure:
function testcode()
mydata.a = 1;
mydata.b = 2;
mydata.c = 3;
mydata.d = 4;
mydata = multiplydata(mydata, 2);
disp(mydata)
end
function [datastruct] = multiplydata(datastruct, n)
varnames = fieldnames(datastruct);
for ii = 1:length(varnames)
datastruct.(varnames{ii}) = datastruct.(varnames{ii})*n;
end
end
,输出:
>> testcode
a: 2
b: 4
c: 6
d: 8
这是不是真的比任何使用varargin
/varargout
功能不同,但如果你写你的代码以这种方式从一开始就使用结构,您不必处理额外的拆包步骤(例如x = varargin{1}
等)。
如果出于某种原因,你绝对必须盲目地调整你的变量(再次,请不要),那么你可以使用assignin
:
function testcode()
a = 1;
b = 2;
c = 3;
d = 4;
multiplydata(2, a, b, c, d);
fprintf('a: %u\nb: %u\nc: %u\nd: %u\n', a, b, c, d)
end
function multiplydata(n, varargin)
for ii = 1:length(varargin)
varname = inputname(ii + 1);
assignin('caller', varname, varargin{ii}*n)
end
end
将返回:
>> testcode
a: 2
b: 4
c: 6
d: 8