盲目地調整工作區中的值是非常不可取的,並且可能導致難以檢測錯誤並使代碼難以維護。反對這個論據本質上反映了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